本质上,我正在尝试加载调整图像大小以将其放在 JButton 上。今天早些时候这是可以工作的,但是当我把我的驱动器带回家处理它并运行该程序时,我得到了java.lang.NullPointerException
。
我对 Java 很陌生,所以如果我错了,请原谅我,但通常这本质上意味着我正在调用不存在的东西。不管怎样,即使我将代码向上或向下移动几行,它也会指出错误位于第 179 行。即使这一行没有代码,我也会收到错误。我已在错误附近包含了代码,并在底部包含了完整的错误消息。
谢谢!
Image play = null;
try {
play = ImageIO.read(new File("/images/play.png"));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
System.out.println("true");
Image pause = null;
try {
pause = ImageIO.read(new File("/images/pause.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// The line it says the error is on.
ImageIcon playIcon = new ImageIcon(play.getScaledInstance(25, 25, Image.SCALE_DEFAULT));
ImageIcon pauseIcon = new ImageIcon(pause.getScaledInstance(25, 25, Image.SCALE_DEFAULT));
btnPause.setIcon(playIcon);
btnPause.setSelectedIcon(pauseIcon);
堆栈跟踪:
java.lang.NullPointerException
at Main.<init>(Main.java:179)
at Main$1.run(Main.java:55)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
最佳答案
您的代码在使用 try..catch
block 的方式以及异常处理方面存在问题。从您的示例中获取相关代码:
try {
play = ImageIO.read(new File("/images/play.png"));
} catch (IOException e1) {
e1.printStackTrace();
}
ImageIcon playIcon = new ImageIcon(play.getScaledInstance(25, 25, Image.SCALE_DEFAULT));
如果第二行(读取图像并将其分配给play
)失败,则会抛出异常,捕获并打印出来。然后您继续,即使播放
尚未分配。因此,当您调用 play.getScaledInstance()
时,您将收到 NullPointerException
,因为 play
为 null
。
您需要做的是停止处理并返回一些失败指示。您无法继续。
关于java - 在没有代码的情况下持续获取 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34936970/