0

エラー:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at test.factory.MainWindow.setFuncList(MainWindow.java:160)
    at test.factory.MainWindow.<init>(MainWindow.java:22)
    at test.factory.MainWindow$2.run(MainWindow.java:151)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:721)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:682)
    at java.awt.EventQueue$3.run(EventQueue.java:680)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:691)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

コード:

TestFactory tf = new TestFactory();
ArrayList<Function> fList = tf.getFunctions();
DefaultListModel<Function> dFuncList = new DefaultListModel();
fListPane.setModel(dFuncList);
for(Function f : fList) {
    dFuncList.addElement(f);
}

質問:

さて、エラーが見つかった場合は素晴らしいことですが、私の質問は. エラー テキストを解析して、エラーの発生場所を見つけるにはどうすればよいですか? みたいなことには慣れてるmissing ';' at line 24 of C:\filename

更新: fList には 2 つの要素があるため、null ではありません。

4

2 に答える 2

3

エラーダンプはスタックトレースであるため、最初から始めて下に進むのが常に最善であると思う傾向があります。この場合、MainWindow.javaの160行目のsetFuncListが、nullのオブジェクト(まだ初期化されていない可能性があります)を処理しようとしているように見えます。

更新:機能するコードの例

class Function {

    int i;

    public Function(int myI) {
        this.i = myI;
    }

    @Override
    public String toString() {
        return "i=" + this.i;
    }
}

一緒に使用:

ArrayList<Function> fList = new ArrayList<>();
fList.add(new Function(1));
fList.add(new Function(2));

DefaultListModel<Function> dFuncList = new DefaultListModel();
jList2.setModel(dFuncList);
for(Function f : fList) {
    dFuncList.addElement(f);
}
于 2013-02-21T21:48:37.163 に答える
0

したがって、基本的にスタック トレースを上から見ていくと、受け取ったエラーの原因となった呼び出しが一覧表示されます。リストされているコードの行を注意深く見てください。明らかなエラーが見られない場合は、エラーに基づいていくつかの追加テストを追加できます。つまり、エラーの原因となった行の前にいくつかのオブジェクトが null ではないことを確認してください。プリントアウトは簡単な方法だと思います。デバッガーを使用することもできます。私はjswatを使用しますが、本当に必要な場合にのみブレークアウトします。

それがあなたが求めていたものであることを願っています

@orangegoat は、必要に応じてスタック トレースを解釈する方法の詳細を説明してくれました。

また、jswat http://code.google.com/p/jswat/へのリンク

于 2013-02-21T22:08:28.037 に答える