Фон с getResourceAsStream ("путь") - PullRequest
3 голосов
/ 01 июля 2011

У меня такая структура папок.

Project/src/folder/folder/folder/xyz.java
       /img/background.jpg

И я хочу поместить background.jpg в JPanel в xyz.java. Просто для фона. И я сделал это с

    private ImageIcon createImageIcon(String path, String description) {
    java.net.URL imgURL = getClass().getResource(path);

    if (imgURL != null) {
        return new ImageIcon(imgURL, description);
    } else {
        System.err.println("Couldn't find file: " + path);
        return null;
    }
}

Но проблема здесь в том, что изображение должно быть в той же папке, что и xyz.java Я немного искал и обнаружил, что это можно решить с помощью getResourceAsStream("path"), но я не могу собрать достаточно знаний, чтобы решить эту проблему. Это важно для меня, потому что я хочу запустить свою программу как файл * .jar в разных операционных системах.

Моя проблема в том, что я не понимаю, как getRessourceAsStream ("путь") должен работать по-другому. Я не нашел учебник, который подходит для меня. Кажется, что большинство людей используют его для разных файлов .jar или апплетов. И я не знаю, что может сделать поток, где начинается getRessourceAsStream («путь») (означает, как я должен написать путь). Существует так много недостатков знаний ...

Редактировать: я нашел решение, в котором мне не нужно указывать общий путь. img = ImageIO.read(getClass().getResource("../../../../img/bg_1.jpg")); Я не проверял его, но он также должен работать на других системах. Но проблема в том, что я могу запустить свою программу только в затмении. Когда я экспортирую его в файл * .jar, это происходит нормально, но не загружает картинку. И это сокращает окно до минимума, хотя у меня есть setPreferredSize. Так что, возможно, мне стоит выработать решение Stream. Но теперь это время спать.

Редактировать: относительный путь работает нормально, когда я помещаю изображения в пакет. Не то, что я действительно хотел, но после 6 часов угадывания об этой крошечной проблеме мне пришлось принести несколько рыбок, чтобы плавать через мой океан ...

Ответы [ 2 ]

5 голосов
/ 01 июля 2011

Поскольку вы не ответили на мой комментарий, я задам несколько вопросов и внесу предложения в качестве ответа:

Все ли вложено в файл Jar?Вы пытались передать путь к изображению или каталогу изображения в командной строке и считать его в качестве параметра командной строки?И снова, почему вы используете ImageIcons, когда отображаете изображение, а не ImageIcon?

Изменить 1
относительно ваших комментариев:

IЯ использую ImageIcon, потому что ## java на freenode.net сказал мне, что он подходит для моих привычек.

Я понятия не имею, кто такой ## java, и какие "привычки" вы подходите, но в настоящее время ситуация такова, что вы используете Image, и ImageIcon не имеет к этому никакого отношения.Так что, действительно, избавься от этого.Упростите и используйте только то, что вам нужно.

Мое первое решение было примерно таким: img = ImageIO.read (new File ("path"));Но для этого нужен также полный путь, а не какой-либо URL-путь, который я знаю из html.

Требования к пути для ImageIO.read ничем не отличаются от того, что вы пытаетесь сделать.Это прекрасное дополнение к вашему решению.

Файл Jar может работать без каких-либо дополнений в разных ОС.Мне просто нужен один из них.

Вы все еще не сказали нам, находятся ли ваши изображения в банке или нет, и где изображения находятся относительно ваших файлов классов, потому что это ключиспользование ресурсов - загрузка ресурсов относительно расположения файлов классов.

3 голосов
/ 01 июля 2011

Загрузка изображений с использованием getResource

Использование ImageIcon на JLabel прекрасно, когда вы отображаете изображение в его реальном размере.

Если вам нужно (динамически) масштабировать изображение или что-то подобное (то есть), то вам нужно сделать пользовательское рисование с изображением.

...