0

私はJavaアプリを持っていますが、時々java.lang.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フォルダにあります。

4

2 に答える 2

2

ImageIcon のソースを見ると、次のように表示されます。

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

これは、URL に null 値を渡していることを意味します。つまり、あなたのコードは

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

nullを返しています。

そこからデバッグします。

于 2013-03-11T17:43:42.387 に答える
1

それは時々起こります。

同期の失敗が原因である場合もあります。Swing GUI オブジェクトは、イベント ディスパッチ スレッド上でのみ構築および操作する必要があります。共有データへのアクセスは同期する必要があります。は、バックグラウンドで画像をロードしている間、GUI の応答性を維持するための 1 つの方法ですSwingWorker

于 2013-03-11T20:35:19.140 に答える