有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用TreeSet对JList进行排序

我在做一个作业,我在做一个程序,生成20个随机数,并将它们放入一个数组列表、一个哈希集和一个树集。它应该在JList1中显示这些数字。然后,我将使用HashSet仅显示唯一的数字,并使用TreeSet显示已排序的数字。我制作了三个JLists,并为每个JLists制作了一个函数来更新GUI(可能有一种更简单的方法来实现这一点,但由于我对java非常陌生,所以我只能想到这些)。例如,我的updateGUI函数用于在我的JList中显示arraylist,如下所示:

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”-错误。函数如下所示:

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

  1. # 1 楼答案

    尽管缺乏信息,我还是提出以下答案

    查看NullPointerException的堆栈跟踪。它给出了事件发生的行号

    这可能是树集被定义了两次,一次是局部变量。或者有一种情况,树集的副本也必须发生。差不多吧

    您可以使用断点对其进行调试。遍历树集变量和另一个变量的所有用法

    为了获得更具响应性的GUI,请使用以下模式

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