Загрузка JPG в приложения Swing - PullRequest
4 голосов
/ 11 декабря 2011

Я думаю, что я страдаю от некоторого блюза классного пути здесь.Я следовал за примерами .Я прочитал учебные пособия .Но, похоже, у меня ничего не работает.

Допустим, у меня есть JPEG с таким URI: C:\Users\MyUser\someIcon.jpeg

И, скажем, у меня есть приложение Swing с JPanel,и я хочу добавить этот JPEG в JPanel (расположение / разметка не имеет значения).

Как бы SO это сделал? Я не получаю никаких ошибок или исключений, просто нетвидя загрузку JPEG.Код, который я пытаюсь использовать, таков:

String someIconUri = "C:\Users\MyUser\someIcon.jpeg";
URL imageUrl = getClass().getResource(someIconUri);
ImageIcon imageIcon = new ImageIcon(imageUrl);
myPanel.add(imageIcon);

Пожалуйста, сообщите ... Я имел дело с этим с полудня сегодня ... и до полуночи.Заранее благодарим за любые подталкивания в правильном направлении.

1 Ответ

10 голосов
/ 11 декабря 2011
String someIconUri = "C:\Users\MyUser\someIcon.jpeg";

Нет, это не «какой-то значок URI», это вообще не допустимый URI. Если подумать, это даже не компилируемое утверждение, поскольку String содержит недопустимые экранирующие символы!

Это может быть что-то вроде ..

String someIconUri = "file:///C:/Users/MyUser/someIcon.jpeg";

Но тогда getResource() не нужен и не полезен, так как он только найдет ресурсы на пути к классам во время выполнения. Просто создайте URL прямо из String.


Но это на самом деле только «часть ответа». Вот почему.

В этом контексте существуют два основных типа ресурсов. Ресурсы приложения и (если не сказать больше) Ресурсы пользователя.

Ресурсы приложений.

Эти ресурсы могут состоять из таких вещей, как значки рамок, значки кнопок и меню (Action значки), значки вкладок. Файлы справки (и связанные изображения), заставки ..

Они должны быть добавлены в отдельный Jar (чаще всего) и добавлены в путь к классам приложения во время выполнения (используя манифест или другие средства, такие как элемент applet или файл JNLP).

Ресурсы приложения должны быть доступны по URL, который можно получить с помощью getResource():

URL iconUrl = this.getClass().getResource("/icons/copy.jpg");

Ресурсы пользователя.

Пользователь хочет открыть (отредактировать / распечатать) существующий текстовый документ, сделать анимированный GIF из кадров изображения, отредактировать изображение в своей файловой системе.

Для ресурсов этого типа (и при условии, что приложение является доверенным или не имеет менеджера безопасности), предложите пользователю JFileChooser. Он вернет определенный, существующий File или более (в зависимости от того, как настроен и использован).

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


Большинство методов, которые получают данные из ресурсов (стоит упомянуть), принимают File URL или InputStream.

Последнее полезно для чего-то, сгенерированного в памяти или полученного из таких источников, как сокеты или объект JNLP API FileContents. Последний представляет особый интерес для приложений в песочнице . запущен или внедрен с использованием Java Web Start .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...