0

私は、20個の乱数を生成し、それらを配列リスト、ハッシュセット、およびツリーセットに配置するプログラムを作成する割り当てを行っています。JList1にそれらの番号を表示することになっています。次に、HashSetを使用して一意の数値のみを表示し、TreeSetを使用してソートされた数値を表示します。私は3つのJListを作成し、それぞれに1つの関数を作成してGUIを更新しました(これを行うにはおそらくもっと簡単な方法がありますが、Javaにまったく慣れていないため、思いつくのはそれだけです)。したがって、たとえば、JListに配列リストを表示するために使用されるupdateGUI関数は、次のようになります。

public void updateGUI(JList someList, ArrayList<Integer> anyarraylist){
        DefaultListModel m = new DefaultListModel();
        for (Object  s : anyarraylist) {
            m.addElement(s);
        }
        someList.setModel(m);
    }

次に、ActionEventを使用してボタンを押すと、その関数を呼び出します。

@Override
public void actionPerformed(ActionEvent arg0) {

    generateNumbers();

    this.updateGUI(this.numbers1, numberlist);

generateNumbersは20個の乱数を生成する関数ですが、numbers1は最初のJListであり、numberlistは配列リストの名前です。

HashSetが一意の番号でJListを表示するために、ほぼ同じことを行いましたが、機能しました。ただし、TreeSetに対して同じことを実行しようとすると、「スレッド「AWT-EventQueue-0」java.lang.NullPointerExceptionの例外」エラーが発生しました。関数は次のようになります。

    public void oppdaterGUI3(JList someList, TreeSet<Integer> anysortedlist){
    DefaultListModel m = new DefaultListModel();
    for (Object  s : anysortedlist) {
        m.addElement(s);
    }
    someList.setModel(m);
}

なぜこれが機能しないのですか?TreeSetはHashSetと同じように機能すると思いました。どんな助けでも大歓迎です。必要に応じて、完全なエラーとコードを投稿できます。

ありがとうございました。

4

1 に答える 1

1

情報が不足していますが、回答として以下を定式化します。

NullPointerException のスタックトレースを見てください。それが発生した行番号を示します。

TreeSet がローカル変数として 1 回、2 回定義されている可能性があります。または、ツリー セットのコピーも行わなければならないケースが 1 つあります。そんな感じ。

ブレークポイントを使用してデバッグできます。ツリー セット var と他の 1 つの var のすべての使用について説明します。

もう少し応答性の高い GUI を使用するには、次のパターンを使用します。

@Override
public void actionPerformed(ActionEvent arg0) {
    EventQueue.invokeLater(new Runnable()) {
        @Override
        public void run() {
            generateNumbers();
            /*MyClass.this.*/ updateGUI(this.numbers1, numberlist);
        }
    });
}
于 2013-02-26T13:39:02.833 に答える