swing窗體打jar包後找不到圖片的問題

今天打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

總結: 通過new ImageIcon(Images.class.getResource("images/1.gif"));用圖片時
              Images.java和Test.java在同一目錄
              images文件夾  和 要使用圖片的java文件 放在同一目錄以確保程序不會出現類似的怪問題,以此類推……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章