0

次のコードが進行中です。

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

JFrame を拡張し、Runnable を実装するパブリック クラス X があります。この public クラス 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)を意味する2つの「パイプ」間でデータを共有することに問題があると思います。

ありがとう!

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 に答える