2011-07-27 82 views
23

我在NetBeans 7.0中有一个Java Project。如何从NetBeans中的'Resources'文件夹正确获取图像

我想动态地给一些标签添加一些图片。图像将根据程序的状态而有所不同。

我在我的项目的'resources'文件夹中放置了一个这样的图像'filling.jpg'。

我想正确地访问此文件(不是通过绝对路径或相对路径,因为这会在构建jar文件时导致问题)。

所以我发现这个方法:

ImageIcon fillingIcon = new ImageIcon(getClass().getClassLoader().getResource("filling.jpg")); 
labelFontFilling.setIcon(fillingIcon); 

它不断给我显示java.lang.NullPointerException。 但是我确定存在该映像,因为我可以将该映像分配给该标签的NetBeans属性菜单中的标签(但我不希望这样,我想通过Java代码添加该映像)。

我做错了什么,以及如何正确地获取该图像?

+1

你能打印给出的路径吗?像System.out.println(getClass()。getClassLoader()。getResource(“filling.jpg”)),这可以为您提供尝试使用的路径的线索。 –

+0

它返回'null',所以这是一个Exeption的问题。但我不明白为什么它的返回是空的 – ShockwaveNN

+1

和哪里是你的项目中创建的资源文件夹?它在类路径中吗? –

回答

20

谢谢,瓦尔特恩里克,与您的提示,我设法意识到,我只是输入此图像的不正确的路径。 在我的尝试之一,我用

String pathToImageSortBy = "resources/testDataIcons/filling.png"; 
    ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy)); 

但正确的方法是我在路项目的名称使用资源

String pathToImageSortBy = "nameOfProject/resources/testDataIcons/filling.png"; 
ImageIcon SortByIcon = new ImageIcon(getClass().getClassLoader().getResource(pathToImageSortBy)); 
39

这是一个痛苦,使用NetBeans IDE 7.2。

  1. 你需要记住,Netbeans的清理每当你重新生成文件夹,所以
  2. 添加资源文件夹到SRC文件夹:

    • (项目)
      • src
        • 项目包文件夹(包含。java文件
        • 资源任何你想要的名称
        • 图像(可选的子文件夹
  3. 清洁后/构建这个结构将会传播进入Build文件夹:

    • (项目)
      • 构建

          • 项目包文件夹(包含生成的.class文件
          • 资源(你的资源
          • 图像(您可选的子文件夹

要访问的资源:

dlabel = new JLabel(new ImageIcon(getClass().getClassLoader().getResource("resources/images/logo.png"))); 

和:

if (common.readFile(getClass().getResourceAsStream("/resources/allwise.ini"), buf).equals("OK")) { 

为我工作。请注意,在一种情况下有一个前导“/”,而另一个则没有。 所以根路径的资源的是build文件夹内的“”文件夹中。

双击dist文件夹中的可执行jar文件。资源的路径仍然有效。

15

我有一个稍微不同的方法,可能有用/更有利于某些人。

在您的主项目文件夹,创建一个资源文件夹。你的文件夹结构应该看起来像这样。

  • 项目文件夹
    • 构建
    • DIST
    • LIB
    • nbproject的
    • 资源
    • SRC

转到您的项目的属性。您可以通过在“项目”选项卡窗口中右键单击项目并在下拉菜单中选择“属性”来完成此操作。

在左侧的类别下,选择来源。

在右侧的源包文件夹中,使用添加文件夹按钮添加资源文件夹。一旦你点击确定,你应该在你的项目下看到一个Resources文件夹。

enter image description here

您现在应该能够拉使用此行或类似的方法资源:

MyClass.class.getResource("/main.jpg"); 

如果你要创建一个名为资源文件夹下的图片包,你可以检索资源像这样:

MyClass.class.getResource("/Images/main.jpg"); 
+1

我使用这种方法,但我发现一个令人不安的影响。在构建netbeans加载jar中的所有资源之后,我真的希望资源不在jar中!那么是否有解决此问题的解决方法? –

+0

不幸的是,java资源方法可能并不完全符合您的需求。但是,如果您的文件驻留在类路径中,那么您可以使用ClassLoader.getSystemResource(“somefile.txt”)...您也不再希望如上所述包含资源文件夹。另一个选择是查看jar的父目录(或静态路径)中的给定文件(资源),并使用File或其他一些等价物打开它们以满足您的需要。如果该文件不存在,请使用jar中存储的资源创建它。在这种情况下,它们更像是模板。 –

相关问题