0

以下代码正在进行中:

private final Controller controller = new Controller();
private final XSimpleList lists[] = new XSimpleList[2]; //extends JList (my framework)

我有一个扩展 JFrame 并实现 Runnable 的公共类 X。这个公共类 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
}

我的问题是......我如何解决这个问题,以便list[0]在从启动的线程调用时不返回那个 NullPointer?

当(仅)从类 X 执行时,问题不存在。我认为在 2 个“管道”之间共享数据是一个问题,这意味着父实例(x 类)和子实例(线程 y)。

谢谢你!

4

1 回答 1

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();
于 2012-06-02T12:34:22.820 回答