2013-03-11 92 views
0

我有一个Java应用程序,我偶尔会得到一个java.lang.NullPointerException。我有这个应用程序在信息亭工作,当这个错误发生时,它卡住,并导致很多问题。偶尔NullPointerException

错误是:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at javax.swing.ImageIcon.<init>(ImageIcon.java:204) 
    at GUI.newCardPanel.backButton1MousePressed(newCardPanel.java:1470) 
    at GUI.newCardPanel.access$11000(newCardPanel.java:36) 
    at GUI.newCardPanel$64.mousePressed(newCardPanel.java:1091) 
    at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:280) 
    at java.awt.Component.processMouseEvent(Component.java:6386) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3268) 
    at java.awt.Component.processEvent(Component.java:6154) 
    at java.awt.Container.processEvent(Container.java:2045) 
    at java.awt.Component.dispatchEventImpl(Component.java:4750) 
    at java.awt.Container.dispatchEventImpl(Container.java:2103) 
    at java.awt.Component.dispatchEvent(Component.java:4576) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4633) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4294) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4227) 
    at java.awt.Container.dispatchEventImpl(Container.java:2089) 
    at java.awt.Window.dispatchEventImpl(Window.java:2518) 
    at java.awt.Component.dispatchEvent(Component.java:4576) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:672) 
    at java.awt.EventQueue.access$400(EventQueue.java:96) 
    at java.awt.EventQueue$2.run(EventQueue.java:631) 
    at java.awt.EventQueue$2.run(EventQueue.java:629) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116) 
    at java.awt.EventQueue$3.run(EventQueue.java:645) 
    at java.awt.EventQueue$3.run(EventQueue.java:643) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:642) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:138) 

线1470:

backButton1.setIcon(new ImageIcon(new ImageIcon(getClass().getResource("/imagenes/sing-in-pres.png")).getImage())); 


public class newCardPanel extends javax.swing.JPanel { //This one is the 36 

1091:(自动生成由Netbeans的代码)

public void mousePressed(java.awt.event.MouseEvent evt) { 
      backButton1MousePressed(evt); //This one is the 1091 
     } 

图像位于src文件夹中。

+3

您正在使用ImageIcon来构建ImageIcon?为什么?另外,请确保'new ImageIcon'实际返回一个对象。你知道,只是为了确定。实际上,请检查'getResource'。有机会,它无法找到你想要的资源。 – 2013-03-11 17:31:05

回答

2

如果你看看源的ImageIcon您将看到:

public ImageIcon (URL location) { 
    this(location, location.toExternalForm()); 
} 

这意味着你逝去的在URL中的空值。 这意味着您的代码在

getClass().getResource("/imagenes/sing-in-pres.png") 

返回null。

从那里调试。

+0

由于偶尔会发生此问题,所以无法进行调试。我找不到任何方法来复制问题。它只是有时发生,我有所有的日志 – 2013-03-11 18:43:20

1

它恰好发生有时

有时可能是错误同步的结果。 Swing GUI对象应该在event dispatch thread上构建和操作只有。访问共享数据必须同步SwingWorker是在后台加载图像时保持GUI响应的一种方法,适用于example

+0

我只是检查,我可以复制这里的问题。有时发生的是这样的:http://stackoverflow.com/questions/15348872/nullpointerexception-sometimes – 2013-03-11 21:20:58

+0

这并不能消除错误的同步作为根本原因。尝试一个不同的机器或看看[这里]引用的方法(http://stackoverflow.com/q/7787998/230513)。 – trashgod 2013-03-11 22:12:51