2016-08-20 40 views
-3

我試圖改變我的Java應用程序的圖標。 這裏是我的項目的結構:當setIconImage()的空指針

src 
    gui 
     FileCopyManager.java 
images 
    folder.png 

現在我有以下代碼:

public class FileCopyManager extends JFrame{ 
    public void changeIcon() { 
     this.setIconImage(new ImageIcon(Toolkit.getDefaultToolkit() 
       .getClass().getResource("../../images/folder.png")).getImage()); 
    } 
    public FileCopyManager() { 
     changeIcon(); 
     this.setSize(800,600); 
     this.setVisible(true); 
    } 
    public static void main() { 
     new SwingUtilities.invokeLater(()->{ 
      new FileCopyManager(); 
     }); 
    } 
} 

然而,當我嘗試運行這段代碼我上 this.setIconNullPointerException

任何想法?

+1

通過使用中間變量和/或使用調試器將行分割成更多行。在使用它之前,你應該確定資源是否存在,如果沒有則拋出異常。 – HopefullyHelpful

+0

在SO搜索中搜索classloader.getresource – HopefullyHelpful

+0

getResource()可能返回null。資源路徑是錯誤的。嘗試「/images/folder.png」 – gclaussn

回答

-1

我會推薦給你的圖片文件夾移動到/src文件夾並使用爲:

src 
|---gui 
| |-FileCopyManager.java 
|---images 
    |-folder.png 

用作:

public void changeIcon() { 
    setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getClassLoader().getResource("images/folder.png"))); 
} 

您還可以創建系統獲取圖像的方法,並把它:

protected static Image createImage(String path, String description) { 
    URL imageURL = Main.class.getResource(path);   
    if (imageURL == null) { 
     System.err.println("Resource not found: " + path); 
     return null; 
    } else { 
     return (new ImageIcon(imageURL, description)).getImage(); 
    } 
} 

在構造函數中用作:

setIconImage(createImage("/images/folder.png", "icon")); 
+1

是否仍然無法正常工作 – cssGEEK