今天打jar包遇到一個怪問題:
打成jar包後雙擊運行沒反應
cmd運行有反應但出現下列問題
Caused by: java.lang.ExceptionInInitializerError
at com.zou.ui.MyDialog.init(MyDialog.java:92)
at com.zou.ui.MyDialog.<init>(MyDialog.java:45)
at com.zou.ui.LoginDialog.<init>(LoginDialog.java:40)
at com.zou.ui.StartProgram.main(StartProgram.java:31)
... 5 more
Caused by: java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:167)
at com.zou.entity.Images.<clinit>(Images.java:28)
... 9 more
查看代碼發現這個問題是由於找不到圖片資源所引起的,但是圖片又打入了jar包,在eclipse中程序能正常運行
仔細測試後又發現不能找到的圖片資源都是gif格式的,png格式的可以找到,不會出錯
項目中的目錄結構如下
src
-com.entity
-Images.java 放圖片對象 public static ImageIcon img1=new ImageIcon(Images.class.getResource("images/1.gif"));
-com.entity.images 放圖片 1.gif,2.png
-com.ui
-Test.java 用圖片 如 JLabel lbl = new JLabel(Images.img1);
在網絡上找資料,用了下面幾種去圖片的方法還是不行
//1
URL address = getClass().getResource( "bubbles.gif ");
Image aquariumImage = Toolkit.getDefaultToolkit().getImage(address);
//2
ClassLoader loader = getClass().getClassLoader();
InputStream is = loader.getResourceAsStream("images/logining.gif");
Image img = ImageIO.read(is);
//3
loging=new ImageIcon(Images.class.getResource("images/logining.gif"));
//4
loging=new ImageIcon(this.getClass().getClassLoader().getResource("images/logining.gif"));
最後參考以前做過的類似的程序時才發現原來把目錄結構改成如下才行,事後真讓人苦笑不得啊
src
-com.ui
-Test.java 用圖片 如 JLabel lbl = new JLabel(Images.img1);
-Images.java 放圖片對象 public static ImageIcon img1=new ImageIcon(Images.class.getResource("images/1.gif"));
com.ui.images 放圖片 1.gif,2.png
Images.java和Test.java在同一目錄
images文件夾 和 要使用圖片的java文件 放在同一目錄以確保程序不會出現類似的怪問題,以此類推……