Следующий код находится в процессе выполнения:Вызов метода JList из потока
private final Controller controller = new Controller();
private final XSimpleList lists[] = new XSimpleList[2]; //extends JList (my framework)
У меня есть класс X общественности, которая простирается JFrame и реализует Runnable. Этот открытый класс X имеет определенный конструктор. Последняя строка в конструкторе:
(new Thread(new X())).start();
В случае необходимости я есть public void run() {}
. В этом методе Run() У меня есть
lists[0].FillUp(controller.getSomeData(), 2);
Нить запрограммирована для выполнения указанной выше линии, когда он получил сообщения от UdP сервера. Итак ... проблема в том, когда данная строка выполняется (время выполнения). В результате получается java.lang.NullPointerException
.
XSimpleList сегменты кода:
final JList hW;
final DefaultListModel dlm;
final JScrollPane lsp;
public final void FillUp(MyTypeRepository volume, int filter) {
dlm.clear();
//iterations
dlm.addElement(some_data);
//end iterations
}
Мой вопрос ... Как я могу решить эту проблему, с тем, что списков [0] не возвращать эту NullPointer при вызове из запущенной темы?
При выполнении (только) из класса X вопрос отсутствует. Я считаю, что проблема заключается в совместном использовании данных между двумя «трубами», что означает родительский экземпляр (класс x) и дочерний экземпляр (поток y).
Спасибо!
Вы настроили массив 'lists' в любом месте, т. Е.' List [0] = new XSimpleList() '? – Howard
Да, все сделано правильно ... единственная проблема в том, что он выбрасывает этот нулевой указатель, когда метод вызывается из потока ... – user1432223
Независимо от причины, ваш дизайн должен быть полностью изменен, поскольку компоненты Swing и их модель должны доступ к ним только из потока отправки событий. Прочтите http://docs.oracle.com/javase/tutorial/uiswing/concurrency/ и http://docs.oracle.com/javase/6/docs/api/javax/swing/package-summary.html#threading (который связан с javadoc каждого компонента качания) –