Добавить изображение в JAR Java
Я использую некоторые изображения в JFrame
Я дал путь для загрузки изображения в панель кадра, но когда я сделал jar приложения, он не отображает изображения.
Где я должен разместить изображение?
Как мне указать путь?
setIconImage(Toolkit.getDefaultToolkit().getImage(
"D:\\RFT\\src\\dailogBox\\dump.jpg"));
как это я сделал.
7 ответов
Первый шаг: поместите ваше изображение в определенное место в вашем JAR-файле. Если вы поместите его в папку src, возможно, ваша IDE или ваш инструмент сборки автоматически упакуют его в JAR. В противном случае проверьте документацию вашего IDE/build-tool, в каком месте вы должны его поместить.
Второй шаг: доступ к файлу из вашей программы. Я предполагаю, что вы положили его в пакет (путь в вашем JAR) package1/package2, и файл называется dump.jpg. В этом случае вы звоните:
setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/package1/package2/dump.jpg")));
getClass (). getResource (...) возвращает URL для ресурса на вашем пути к классам. Вы начинаете путь в classpath с "/" и используете полный путь / пакеты к вашему ресурсу, разделенные "/".
Это лучший способ обрабатывать все изображения и значки в приложении JAR.
После того, как вы заархивировали все свои изображения и значки в свой собственный JAR-файл, настройте путь сборки, добавив JAR-файл изображений на вкладку "Библиотеки", чтобы он теперь был включен в ваш путь к классам.
Затем просто используйте следующие 3x строки кода в начале вашего конструктора, чтобы получить доступ к любому изображению, в котором вы нуждаетесь, для чего угодно, включая изображение 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 зарегистрирован в вашем classpath - вы можете в любое время без каких-либо хлопот добавлять любые другие изображения в тот же JAR-файл - все просто работает, и добавленные изображения мгновенно доступны для вашего приложения.
Намного лучше, на мой взгляд.
Сначала создайте пакет (скажем, изображения) в Source Packages
скопируйте все ваши изображения в этот пакет (когда вы создаете пакет, папка с именем вашего пакета будет создана внутри папки 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 Piclabel
Есть много способов, например, сделать папку с именем resources в вашем jar-файле и ссылаться на ваши изображения оттуда, используя относительный путь....
В netbeans 8.1 я включил папку с иконками и другими изображениями под названием Resources в папку src в файле проекта. Поэтому всякий раз, когда я собираю Jar- файл, папка включается туда. Дерево файлов должно выглядеть так:
- src (файлы Java в исходных пакетах здесь)
** УПАКОВКА, которую вы назвали в проекте **
- file.java
Ресурсы
- image.jpg
Код должен быть таким:
jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));
Добавьте изображение в свой jar как ресурс, затем (при условии, что jar находится на вашем пути к классам), используйте загрузчик классов, чтобы загрузить его как поток.
Самый простой способ сделать это - иметь папку, в которой изображение находится параллельно файлу jar. Пример:
Скажите в коде, который вы называете изображение следующим образом:
pic = new ImageIcon("Pics/buttonpic.jpg");
Это означает, что ваше изображение будет называться buttonpic и находится в папке Pics в каталоге вашего проекта. Теперь, после создания файла JAR, скопируйте эту папку Pics в ту же папку, где находится файл JAR.
Пример: если ваш файл jar находится на рабочем столе, поместите папку Pics на рабочий стол. Теперь, когда вы запустите JAR-файл, ваши изображения будут работать правильно. Теперь, чтобы скрыть тот факт, что у вас должна быть папка Pics рядом с файлом JAR, вы можете создать новую папку и поместить в нее папку JAR и папку Pics. Затем щелкните правой кнопкой мыши по банке и создайте ярлык, затем поместите этот ярлык на рабочий стол или там, где вы хотите иметь только файл баночки, и поместите новую созданную вами папку, где бы вы ни хотели ее скрыть.