2013-02-26 85 views
0

我正在做一個任務,我正在做一個生成20個隨機數的程序,並將它們放置在一個數組列表,一個哈希集和一個樹形結構集中。它應該在JList1中顯示這些數字。然後,我將使用HashSet僅顯示唯一的數字,TreeSet顯示已排序的數字。我製作了三個JList,併爲它們中的每一個都創建了一個函數來更新GUI(這可能是一種更簡單的方法,但是由於我對Java相當陌生,所以我可以提出這一點)。因此,例如用我updateGUI功能在我的JList顯示數組列表如下:使用TreeSet對JList進行排序

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相同。任何幫助表示讚賞。如有必要,我可以發佈完整的錯誤和代碼。

謝謝。

+1

你不能真正期待一個全面和有意義的答案,缺少這麼多的信息。請更新您的問題。 – kriegaex 2013-02-26 20:32:24

回答

1

我提出以下答案,雖然信息缺乏。

看看NullPointerException的棧跟蹤。它給出了它發生的行號。

這可能是TreeSet定義了兩次,一次是局部變量。或者有一種情況,樹集的副本也必須發生。類似的東西。

您可以使用斷點進行調試。遍歷樹集var和其他var的所有用法。

對於響應性更強的GUI,使用以下模式。

@Override 
public void actionPerformed(ActionEvent arg0) { 
    EventQueue.invokeLater(new Runnable()) { 
     @Override 
     public void run() { 
      generateNumbers(); 
      /*MyClass.this.*/ updateGUI(this.numbers1, numberlist); 
     } 
    }); 
}