Java:来自class.getResource(...)的NullPointerException

时间:2011-05-16 20:32:51

标签: java classpath

我正在编写一个小应用程序,当我尝试创建一个ImageIcon时,我总是遇到异常。这个例外是由这行代码引起的:

prayerLevel.setIcon(new ImageIcon(getClass().getResource("/icons/icon_prayer.png")));

现在在我的程序中,文件夹/ icons /确实存在。我不知道它是否有所不同但是类文件在一个包中,其中icons文件夹在项目文件夹中(当你看到bin和src文件夹时)。

我已经四处寻找,我找不到可以帮助我解决问题的解决方案。也许你们中的任何人都可以帮忙吗?

编辑:有人要求我的文件夹层次结构:

Folder Hierarchy

我知道类文件与图标不在同一文件夹中,但是我已经创建了应用程序,我必须从不同的文件夹加载文件并执行/文件夹/始终用于工作。

编辑2:

System.out.println(getClass().getResource("/icons/icon_prayer.png") == null);

打印真实。

5 个答案:

答案 0 :(得分:11)

我相信当ImageIcon正在返回getResource时,NPE会从null构造函数中抛出。

尝试以下方法:

getClass().getClassLoader().getResource("/icons/icon_prayer.png")

或者:

ClassLoader.getSystemResource("/icons/icon_prayer.png")

答案 1 :(得分:3)

据我所知getResource()将查看已知资源的位置,换句话说,如果文件夹/icons/未被视为资源文件夹,则不会像您预期的那样。据我所知,有两种解决方法:

1)将icons文件夹设置为应用程序的资源,然后您可以使用getResource() URL css_url = getClass().getResource("/resource/style.css");

有关此选项的详细信息,请参阅http://lj4newbies.blogspot.com/2008/03/using-classgetresource-load-resource.html

2)不使用getResource()方法将图标作为常规文件获取。这实际上是在Swing tutorials on Sun/Oracle own documentation中提出的。

  

通常,应用程序提供自己的一组图像作为一部分   应用程序,就像这样   与我们许多人使用的图像   演示。你应该使用Class   getResource方法获取路径   到图像。这允许   应用程序验证图像   是可用的,并提供明智的   错误处理,如果不是。当。。。的时候   图像不是应用程序的一部分,   不应该使用getResource和   使用ImageIcon构造函数   直。例如:

     

ImageIcon icon = new   的ImageIcon( “图像/ middle.gif”,                                  “一个漂亮但毫无意义的splat”);

希望这有帮助,祝你好运!

答案 2 :(得分:1)

我将我的音乐,图片等添加到添加到构建路径的文件夹中。然后我就用了

URL url="CurrentClass".class.getClassLoader().getResource("media file name not the path");
setIconImage(new ImageIcon(url.getPath()).getImage());

设置图像图标。

答案 3 :(得分:1)

旧线程,但因为我刚才碰到了类似的问题......

我使用Eclipse并将文件复制到"资源"使用系统命令(to_sql)的文件夹。然而,eclipse投了一个cp,因为我没有刷新"资源"夹。所以文件就在那里,但Eclipse没有看到它。

所以在Eclipse中:" Package Explorer" - > "资源" - >鼠标右键单击 - >刷新。这为我修好了。

答案 4 :(得分:-1)

在这行代码中唯一可以抛出NullPointerException的是第一个.,这意味着prayerLevel为空。