我写了一个方法,以获得我挥杆的图标:
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" ) );
进入空指针
我用“next.png”图标
在其中创建了一个源文件夹“resources”和一个文件夹“img”问题出在哪里?
由于
答案 0 :(得分:3)
为此,资源文件夹应与this.getClass()
包对应的文件夹位于同一文件夹中。要从类路径的根开始,请使用getClass().getResource("/resources/img/next.png")
。 (带有前导/
)
答案 1 :(得分: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是包含此方法的通用类
答案 2 :(得分:1)
对于那些在Google中遇到此页面需要帮助的人 - 我在另一个StackOverflow question中写了一个答案,提供了处理JAVA应用中图像的最佳方法,以便您可以轻松访问所有图像的图像Java中的方法类型:
这是处理JAR App中所有图像和图标的最佳方式。
将所有图像和图标压缩到自己的JAR文件后 - 通过将图像JAR文件添加到库选项卡中来配置构建路径,以便它现在包含在类路径中。
然后只需在构造器的开头使用以下 3x代码行即可访问任何所需的图像,包括不接受简单ImageIcon作为其主图标的SystemTray图像(很奇怪,我知道)。 3x行是:
URL iconUrl = this.getClass().getResource("/image-iconb.png");
Toolkit tk = this.getToolkit();
someimgicon = tk.getImage(iconUrl);
(someimgicon只是一个声明为Image变量的构造函数) 现在您可以将窗口图标设置为:
setIconImage(someimgicon);
和同时通过声明设置系统TrayIcon时使用相同的变量:
trayIcon = new TrayIcon(someimgicon, "SystemTray Demo", popupMenu);
以上功能可让您轻松集中地声明Images或ImageIcons,而不会冒不将图像资源保存在正确位置的风险。它使它保持整洁,JAR包含在运行时自动编译的所有图像以及程序的分发。
作为奖励,一旦JAR在您的类路径中注册 - 您可以随时在同一个JAR中添加任何其他图像而不用任何大惊小怪 - 一切正常,添加的图像是即时可用于您的应用。
在我看来好多了。