为什么我的图标处理代码会抛出 NullPointerException?
-
19-09-2019 - |
题
我已经为我的按钮添加了图像,但是当我运行该框架时,将抛出此异常。为什么?请帮助我。
init:
deps-jar:
compile-single:
run-single:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:138)
at ClientGUI.IdAndPasswordFrame.initComponents(IdAndPasswordFrame.java:91)
at ClientGUI.IdAndPasswordFrame.<init>(IdAndPasswordFrame.java:22)
at ClientGUI.IdAndPasswordFrame$4.run(IdAndPasswordFrame.java:200)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
BUILD SUCCESSFUL (total time: 1 second)
第 138 行:
public ImageIcon (URL location) {
this(location, location.toExternalForm());
}
第91行:
jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Images/yahoo_1.gif"))); // NOI18N
我使用这个糟糕的检查(Peter Lang推荐),即:System.out.println(getClass().getResource("/Images/yahoo_1.gif"));并且返回null,为什么呢?请帮我。
解决方案
这意味着 getClass().getResource("/Images/yahoo_1.gif")
回报 null
.
Java文档 指出如果发生这种情况
无法找到资源或调用者没有足够的权限来获取资源。
检查是否
getResource
真的回来了null
:
System.out.println(getClass().getResource("/Images/yahoo_1.gif"));
确保您的路径正确并且位于您的类路径中。
编辑:
我刚刚用 NetBeans 尝试过。我创建了以下结构
Source Packages
Images
yahoo_1.gif
并且您的代码运行良好。这是你的结构吗?
尝试右键单击您的应用程序并选择 Clean and Build
.
其他提示
为了解决这一问题,该图像需要在仓要复制强>目录 - 而不是在的 SRC 强>目录
否则,你会得到空所有的时间上的的getClass()。的getResource( “image.png”)。 路径是不为空,并可以将其设置为上面 - 只有当你复制你所需要的二进制文件目录,这里为您的项目的.class文件都位于里面的图片
这解决了这一问题。让我知道如果我在这个帮助。
伊万娜
它看起来像getClass().getResource("/Images/yahoo_1.gif")
回报null
即.gif文件不能在你的classpath中找到。 (图像与图像也许?)
的URL被传递的时间是从该行空:
getClass().getResource("/Images/yahoo_1.gif")
从JDK文档:
用于读取资源[的getResource(..)返回] URL对象, 或NULL,如果资源不能 发现或者调用方没有 具有足够的权限来获取 资源
可能你的意思( “图像/ yahoo_1.gif”) - 即相对路径不是绝对
我有同样的问题。对我有用的是:
- 查看 jar 文件或 bin 文件夹(带有 .class 文件的文件夹)并查看图像的路径。
- 项目清单
private class HandlerClass implements ActionListener{
public void actionperformed(ActionEvent event){
JOptionPane.showMessageDialog(null, String.format("%s", event.getActionCommand()));
}
}