使用TreeSet对JList进行排序

时间:2013-02-26 13:18:47

标签: java jlist hashset treeset

我正在做一个任务,我正在创建一个生成20个随机数的程序,并将它们放在arraylist,hashset和treeset中。它应该在JList1中显示这些数字。然后,我将使用HashSet仅显示唯一的数字,并使用TreeSet显示已排序的数字。我制作了三个JLists,并为每个JLists创建了一个更新GUI的功能(可能有一种更简单的方法可以做到这一点,但由于我对java很新,所以我只能想出来)。所以,例如我用于在我的JList中显示arraylist的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是我的arraylist的名字。

我为HashSet做了几乎完全相同的事情,以显示具有唯一数字的JList,并且它有效。但是,我接着尝试对TreeSet执行相同的操作,这给了我一个“线程中的异常”AWT-EventQueue-0“java.lang.NullPointerException”-error。该函数如下所示:

    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 个答案:

答案 0 :(得分:1)

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

查看NullPointerException的stacktrace。它给出了它发生的行号。

可能是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);
        }
    });
}