2013-02-21 3 views
0

Ошибка:Java JList NullPointerException ошибка

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 имеет два элемента, поэтому не имеет значения.

+1

для лучшей помощи скорее опубликуйте [SSCCE] (http://sscce.org/), short, runnable, compilable, с жестко закодированным значением в локальной переменной, вместо 'FileIO' – mKorbel

+0

Это, похоже, не достаточно кода. Есть ли вызов setFuncList в вашем классе MainWindow.java (в строке 160)? – Slartibartfast

+0

внутри() светло-голубой - это класс и: ## - номер строки, поэтому (MainWindow.java:160) говорит строка 160 MainWindow.java – orangegoat

ответ

3

Ошибка дампа - это трассировка стека, поэтому я стараюсь найти, что всегда лучше начинать сверху и работать вниз. В этом случае он выглядит так, как ваш setFuncList в строке 160 MainWindow.java пытается работать с объектом, который является нулевым (возможно, еще не инициализирован?).

UPDATE: Пример кода, который работает

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); 
} 
+0

Строка 160 - это строка setModel(), но пример, который я использовал, делает то же самое; новый затем установлен. Я переместил его после цикла for, и он все еще равен нулю. Есть ли какой-нибудь код для установки строки, которая будет отображаться в jList? –

+0

Должен ли я использовать String в DefaultListModel? –

+0

Вы код выглядит нормально. Можете ли вы сбросить содержимое dFuncList после цикла for - просто чтобы убедиться, что он содержит то, что вы ожидаете? – Bridgey

0

Так в основном просматривать трассировки стека из верхней части, это будет список вызовов, которые произошли, которые привели к полученную вами ошибку. Посмотрите внимательно на строки вашего кода, которые перечислены. Если вы не видите каких-либо очевидных ошибок, вы можете добавить дополнительные тесты на основе ошибки. Т.е. проверьте, что некоторые объекты не являются нулевыми до строки, вызвавшей ошибку, я нахожу распечатки простым подходом. Вы также можете использовать отладчик, я использую jswat, но только разбиваю его, когда мне действительно нужно.

Надежда, что было то, что вы были после

@orangegoat дал хорошую разбивку, как интерпретировать трассировки стека, если это то, что вы хотели

Также ссылка на jswat http://code.google.com/p/jswat/