【问题标题】:where do i put images for icons in java (netbeans) and how do i link them to the code?我在哪里放置Java(netbeans)中图标的图像以及如何将它们链接到代码?
【发布时间】:2014-12-01 21:24:54
【问题描述】:

我正在尝试制作一个带有图标按钮的 Jframe 类

 public ImageIcon Flag = new ImageIcon(getClass().getResource("resources/Flag.png"));

给我一​​个空指针异常

“C:\Users\Khalidi\Documents\NetBeansProjects\MineSweeper\resources\Flag.png”

是到达我想要的图像的完整目录吗 我创建了文件夹资源来存放我需要的图像 我应该把图像放在哪里?我应该写哪一行代码?

提前致谢

【问题讨论】:

  • 将资源文件夹放入 src 并在您当前使用的路径的开头使用/
  • 引用的其他参考文献here.

标签: java swing jframe embedded-resource imageicon


【解决方案1】:

正如您要求的约定:使用 Maven 构建基础架构,您将拥有

  • src/main/java - java 包
  • src/main/resources - 图片等资源
  • src/main/resources/images/Flag.png - 一些资源(无约定)

在您创建的 jar/.classes 中

  • /images/Flag.png

    public ImageIcon Flag = new ImageIcon(getClass().getResource("/images/Flag.png"));
    

这里Class.getResource()使用类的包的相对路径;因此,使用上面的绝对路径(“/...”)是最简单的。

【讨论】:

    【解决方案2】:

    您可以简单地将文件夹资源放置到具有编译类的文件夹中,然后像这样制作 ImageIcon。

    public ImageIcon Flag = new ImageIcon("resources/Flag.png");
    

    【讨论】:

    • 虽然这个答案可以在 IDE 中工作,但一旦应用程序被打包到一个 jar 中,它将不再工作
    • 感谢指正,我还是初学者。我只使用它而不制作jar包。请问,如果我将我的应用程序打包到 jar 中,为什么它不起作用?
    • 当您将字符串传递给ImageIcon 时,它将在文件系统上查找文件,从工作目录开始。在IDE中工作目录就是Project Root。这就是为什么这将在 IDE 中工作。但是一旦在 jar 中,它就变成了二进制资源,需要通过 URL 访问。在 OP 的当前文件结构的情况下,文件甚至可能不会放入 jar 中,除非您自定义 IDE 的构建配置。我通常将我所有的资源放在src 某处并使用Class.getResource("/path/to/resources/image.png");...
    • path 直接在src 中。默认构建会将src 中的所有内容放入类路径中。正如其他人指出的那样,您可以通过从getResource获取URL来访问类路径资源。
    • 请参阅 this post 以获得一些好的阅读内容
    【解决方案3】:

    尝试使用相同的方法使用包路径。 例如,如果我的图像在 org.nisheeth.resources 包中,则应写如下。

    public ImageIcon flag = new ImageIcon(Test.class.getResource("/org/nisheeth/resource/Flag.png"));
    

    【讨论】:

      【解决方案4】:

      创建一个包,比如 ImgPack 并将所有图像粘贴到此包中,然后使用访问所有图像

          ImageIcon ii = new ImageIcon(System.getProperty("user.dir")+"\\src\\ImgPack\\<Imagename.extention>");
      

      【讨论】:

        【解决方案5】:

        当您使用 getClass().getResource() 加载图像时,JVM 实际上使用您的 CLASSPATH 来加载资源(您应该仔细查看 Class#getResource(...))。

        因此,为了让您的资源可用,您必须将其推送到您的项目输出文件夹(必须是 target 之类的东西,不是吗?)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-02-16
          • 2017-12-06
          • 1970-01-01
          • 2015-08-21
          • 2021-05-29
          • 2019-07-23
          • 1970-01-01
          • 2014-08-31
          相关资源
          最近更新 更多