从线程调用JList方法

时间:2012-06-02 09:48:41

标签: java multithreading object 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类执行(仅)时,问题不存在。我认为在2个“管道”之间共享数据是一个问题,这意味着父实例(类x)和子实例(线程y)。

谢谢!

1 个答案:

答案 0 :(得分:1)

lists[0] has NULL because
private final XSimpleList lists[] = new XSimpleList[2] creates an array with NULL values Like:
  lists[0] = NULL;
  lists[1] = NULL;

You should write code as:
private final XSimpleList lists[] = new XSimpleList[2];
lists[0] = new XSimpleList();
lists[1] = new XSimpleList();