我正在编写一个小应用程序,当我尝试创建一个ImageIcon时,我总是遇到异常。这个例外是由这行代码引起的:
prayerLevel.setIcon(new ImageIcon(getClass().getResource("/icons/icon_prayer.png")));
现在在我的程序中,文件夹/ icons /确实存在。我不知道它是否有所不同但是类文件在一个包中,其中icons文件夹在项目文件夹中(当你看到bin和src文件夹时)。
我已经四处寻找,我找不到可以帮助我解决问题的解决方案。也许你们中的任何人都可以帮忙吗?
编辑:有人要求我的文件夹层次结构:
我知道类文件与图标不在同一文件夹中,但是我已经创建了应用程序,我必须从不同的文件夹加载文件并执行/文件夹/始终用于工作。
编辑2:
System.out.println(getClass().getResource("/icons/icon_prayer.png") == null);
打印真实。
答案 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
为空。