2011-12-16 72 views
2

图像图标我为了得到图标我的挥杆写了一个方法:无法获得在运行的JAR

public Icon getIcon(String iconName) { 

    Icon icon = null; 

    if(iconName.equals("NEXT")){ 
     icon = new ImageIcon(getClass().getResource("resources/img/next.png")); 
    } 

    return icon; 
} 

icon = new ImageIcon(getClass().getResource("resources/img/next.png")); 

进去空指针

我创建了一个源文件夹“资源”和其中的一个文件夹“img”与“next.png”图标

问题在哪里?

由于

+0

当它不在可运行Jar中时它工作吗? – Halfwarr 2011-12-16 19:58:20

+0

没有它不,我发现为什么,我希望我可以在我的话题 – desmatron 2011-12-16 20:32:25

回答

3

对于这项工作,资源文件夹应该在相同的文件夹对应于包的this.getClass()的文件夹。要从类路径的根开始,请使用getClass().getResource("/resources/img/next.png")。 (带有前导/

1

所以,我找到了正确的方法:

public static ImageIcon getImageIcon(String iconName) { 

    ImageIcon imageIcon = null; 

    if(iconName.equals("DOWNLOAD")){ 
     imageIcon = new ImageIcon(ImagesLocation.class.getResource("/img/download.png")); 
    } 

    return imageIcon; 
} 

用“资源”源文件夹在项目的相同的水平,并与内一个img文件夹(包样式)

ImagesLocation是包含此方法

1

对于那些需要帮助的人,在谷歌所遇到的这个页面泛型类 - 我写在另一个StackOverflow question的答案给予处理图像的最佳方式在Java应用程序等等您可以轻松访问Java中所有图像方法类型的图像:

这是处理JAR应用程序中所有图像和图标的最佳方法。

一旦将所有图像和图标压缩到它自己的JAR文件中 - 通过将图像JAR文件添加到库选项卡中,使其现在包含在您的类路径中来配置您的构建路径。

然后,只需使用下面的3X行代码你constuctor开始访问你需要的任何东西,包括一个SystemTray的图像不接受简单的ImageIcon的作为其主要的图标(奇怪,我知道)的任何图像。 3倍线:

URL iconUrl = this.getClass().getResource("/image-iconb.png"); 
    Toolkit tk = this.getToolkit(); 
    someimgicon = tk.getImage(iconUrl); 

(someimgicon仅仅是一个构造函数中声明图像变量) 现在你可以设置窗口图标简单,如:在同一时间

setIconImage(someimgicon); 

通过声明设置系统TrayIcon时使用相同的变量:

trayIcon = new TrayIcon(someimgicon, "SystemTray Demo", popupMenu); 

上述内容允许您轻松地集中声明图像或ImageIcons,而不会出现将图像资源保留在正确位置的风险。它保持了它的漂亮和整洁,包含所有图像的JAR在运行时自动编译并分发程序。

作为奖励,一旦JAR位于CLASSPATH注册 - 你可以保持随时添加任何其他图像到同一JAR没有任何大惊小怪太 - 一切都只是工作和增加的图像立即提供给您的应用程序。

在我看来更好。