Добавить изображение в JAR Java

Я использую некоторые изображения в JFrame, я указал путь для загрузки изображения в панель фрейма, но когда я сделал jar приложения, он не отображает изображения.
Где я должен разместить изображение?
Как мне указать путь?

setIconImage(Toolkit.getDefaultToolkit().getImage(
                "D:\\RFT\\src\\dailogBox\\dump.jpg"));

вот так я сделал.


person Community    schedule 08.07.2009    source источник


Ответы (7)


Первый шаг: Поместите изображение в определенное место в вашем JAR-файле. Если вы поместите его в папку src, возможно, ваша среда IDE или инструмент сборки автоматически упакуют его в JAR. В противном случае проверьте документацию вашей IDE/инструмента сборки, в какое место вы должны его поместить.

Второй шаг: доступ к файлу из вашей программы. Я предполагаю, что вы поместили его в пакет (путь в вашем JAR) package1/package2, и файл называется dump.jpg. В этом случае вы звоните:

setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/package1/package2/dump.jpg")));

getClass().getResource(...) возвращает URL-адрес ресурса в вашем пути к классам. Вы начинаете путь в пути к классам с «/» и используете полный путь/пакеты к вашему ресурсу, разделенные «/».

person Mnementh    schedule 08.07.2009
comment
@KareemMesbah, вы бы просто ссылались на него как MyClass.class.getResource(/path/to/file.jpg) - person haventchecked; 13.03.2014

Это лучший способ обработки всех изображений и значков в приложении JAR.

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

Затем просто используйте следующие 3 строки кода в начале вашего конструктора, чтобы получить доступ к любому изображению, которое вам нужно для чего угодно, включая изображение SystemTray, которое не принимает простой ImageIcon в качестве основного значка (странно, я знаю ). 3x строки:

  URL iconUrl = this.getClass().getResource("/image-iconb.png");
  Toolkit tk = this.getToolkit();
  someimgicon = tk.getImage(iconUrl);

(someimgicon — это просто объявленная конструктором переменная Image) Теперь вы можете установить значок окна так же просто, как:

setIconImage(someimgicon);

и одновременно используйте одну и ту же переменную при установке System TrayIcon, объявив:

 trayIcon = new TrayIcon(someimgicon, "SystemTray Demo", popupMenu);

Вышеупомянутое позволяет вам легко и централизованно объявлять изображения или значки изображений, не рискуя не хранить ресурсы изображения в нужном месте. Это делает его красивым и аккуратным, а JAR, содержащий все ваши изображения, автоматически компилируется во время выполнения и распространения вашей программы.

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

На мой взгляд гораздо лучше.

person Martin Sansone - MiOEE    schedule 30.12.2014
comment
Мы должны заархивировать ВСЕ наши изображения и значки в собственный файл JAR, а затем наша IDE создаст другой файл JAR, который инкапсулирует исходный файл JAR? Что?! Почему - person Hatefiend; 08.01.2017

Сначала создайте пакет (скажем, изображения) в разделе «Исходные пакеты».

скопируйте все ваши изображения в этот пакет (когда вы создаете пакет, папка с именем вашего пакета будет создана внутри папки src вашего проекта, поэтому скопируйте в нее изображения)

Вы можете получить доступ к своим изображениям из своей программы как

Пример 1:

        this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/yourimagename")));

Пример 2:

        URL imageurl = getClass().getResource("/images/imagename");//assuming your package name is images 
        Image myPicture = Toolkit.getDefaultToolkit().getImage(imageurl);
        JLabel piclabel = new JLabel(new ImageIcon( myPicture ));
        piclabel.setBounds(0,0,myPicture.getWidth(null),myPicture.getHeight(null));

Теперь используйте эту пиктограмму JLabel

person Joyal Augustine    schedule 22.08.2012

Есть много способов, например, создать папку с именем resources в файле jar и ссылаться на ваши изображения оттуда, используя относительный путь....

person hhafez    schedule 08.07.2009
comment
я вставил изображение в исходную папку, как установить относительный путь? - person ; 08.07.2009

В netbeans 8.1 я включил папку со значками и другими изображениями под названием Resources в папку src в файле проекта. Поэтому всякий раз, когда я создаю файл Jar, папка включается туда. Дерево файлов должно быть таким:

  • src (файлы Java в исходниках находятся здесь)
  • ** ПАКЕТ, НАЗВАННЫЙ В ПРОЕКТЕ**

    • file.java
  • Ресурсы

    • image.jpg

Код должен быть таким:

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));
person Abdelsalam Shahlol    schedule 07.02.2017

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

person joeslice    schedule 08.07.2009
comment
можете ли вы дать мне пример для этого? - person ; 08.07.2009
comment
getClass().getResourceAsStream(/icons/closed_folder_small.png); - person Srijani Ghosh; 10.09.2015

Самый простой способ сделать это — создать папку, в которой находится ваше изображение, параллельно файлу jar. Пример:

Скажем, в коде вы вызываете изображение следующим образом:

pic = new ImageIcon("Pics/buttonpic.jpg");

Это означает, что ваше изображение будет называться buttonpic и находится в папке Pics в каталоге вашего проекта. Теперь, после того как вы создадите файл jar, скопируйте эту папку Pics в ту же папку, в которой находится ваш файл jar.

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

person EasyAnswer    schedule 09.08.2010
comment
Я думаю, что вы получили эти отрицательные голоса, потому что предпочтительный способ - хранить все ваши активы в архиве JAR с приложением. Таким образом, вам нужно распространять только один файл. - person Matka; 12.07.2017