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 有两个元素,所以不为空。

4

2 回答 2

3

错误转储是一个堆栈跟踪,所以我倾向于发现最好从顶部开始并向下工作。在这种情况下,您在 MainWindow.java 的第 160 行的 setFuncList 似乎正在尝试使用为空的对象(可能尚未初始化?)。

更新:有效的代码示例

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

所以基本上从顶部查看堆栈跟踪,它将列出导致您收到错误的已发生调用。仔细查看代码中列出的行。如果您看不到任何明显的错误,您可以根据错误添加一些额外的测试。即在导致错误的行之前检查某些对象是否为空,我发现打印输出是一种简单的方法。您也可以使用调试器,我使用jswat但仅在我真正需要时才将其断开。

希望那是你所追求的

@orangegoat 很好地分解了如何解释堆栈跟踪,如果这是你想要的

还有一个链接到 jswat http://code.google.com/p/jswat/

于 2013-02-21T22:08:28.037 回答