2015-02-18 3 views
0

У меня возникли проблемы с запуском исполняемого файла jar, в котором есть значок изображения.Экспорт Runnable Jar не работает с ImageIcon

Код работает на eclipse и отображает значок в JFrame. Я добавляю его в JLabel, а затем добавляю JLabel в JFrame. Я экспортирую проект в исполняемый файл Jar и когда я дважды щелкаю банку. Он не работает.

Я тестировал только добавление нормального JLabel на JFrame без кода значка, и он работает, когда я экспортировал и запускал его.

Всякий раз, когда я добавляю следующую строку в код, она испортит исполняемый файл Jar.

JLabel s1 = new JLabel(new ImageIcon(getClass().getResource("/Images/Pattern1.png"))); 

Я заметил, что это может быть что-то неправильно, когда оно получает ресурсы. My Image Pattern1, хранится в папке «Изображения», и эта папка находится внутри моей папки src проекта. Так что я уверен, что он находится в файле runnable jar, когда я его экспортирую.

Вот мой код

package main; 


import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 


public class MyFrame extends JFrame {  

public MyFrame() { 
    JLabel s1 = new JLabel(new ImageIcon(getClass().getResource("/Images/Pattern1.png"))); 
    this.add(s1); 

//JLabel test = new JLabel("Test"); 
//this.add(test); 

} 

public static void main(String[] args) { 
    MyFrame f = new MyFrame(); 
    f.pack(); 
    f.setVisible(true); 
} 
} 

Это то, что мои файлы в моем проекте выглядит.

enter image description here

Благодаря

+1

Не уверен, что это будет иметь значение, но вы пробовали '/ Images/Pattern1.PNG' – MadProgrammer

+0

О, ничего себе. Он работает с .PNG. Это действительно странно. Спасибо друг. – AndroidJava

+0

Java может быть немного «ленивым» с файлами (особенно в Windows), но встроенные ресурсы называются ТОЧНО – MadProgrammer

ответ

2

Особенно на Windows, Java может быть снисходительными по использованию случае в именах файлов. При запуске в Eclipse, Pattern1.PNG, вероятно, напрямую связан с файловой системой.

После того, как встроенный в Jar, сопоставление дел будет EXACT. Это связано с тем, что ресурс просто добавляется в zip-файл, а Java использует информацию Zip Entry для поиска контента.

Убедитесь, что именование является ТОЧНЫМ, чтобы избежать проблем. Попробуйте /Images/Pattern1.PNG вместо /Images/Pattern1.png

+0

Хорошее объяснение. Благодаря! – AndroidJava

+0

Это легко сделать;) – MadProgrammer

Смежные вопросы