无法在runnable jar中获取图像图标

时间:2011-12-16 19:22:43

标签: java image swing resources icons

我写了一个方法,以获得我挥杆的图标:

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”

问题出在哪里?

由于

3 个答案:

答案 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中添加任何其他图像而不用任何大惊小怪 - 一切正常,添加的图像是即时可用于您的应用。

在我看来好多了。