2013-03-11 90 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