2013-02-26 3 views
0

Я выполняю задание, в котором я создаю программу, которая генерирует 20 случайных чисел и помещает их в arraylist, hashset и treeet. Предполагается показать эти числа в JList1. Затем я собираюсь использовать HashSet для отображения только уникальных номеров, а TreeSet - для сортировки чисел. Я сделал три JLists и сделал одну функцию для каждого из них, чтобы обновить GUI (возможно, это был более простой способ сделать это, но все, что я мог придумать из-за того, что я был совершенно новым для java). Так, например, моя функция updateGUI используется для отображения ArrayList в моем 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 - имя моего 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

Вы не можете рассчитывать на исчерпывающий и содержательный ответ, в котором столько информации отсутствует. Пожалуйста, обновите свой вопрос. – kriegaex

ответ

1

Я сформулирую следующее как ответ, хотя информации не хватает.

Посмотрите на stacktrace исключения NullPointerException. Он дает номер строки, где это произошло.

Возможно, TreeSet определяется дважды, как локальная переменная. Или есть один случай, когда должна была произойти копия набора деревьев. Что-то вроде того.

Вы можете отладить его, используя точки останова. Пройдите все использования дерева set var и еще одного var.

Для более гибкого графического интерфейса используйте следующий шаблон.

@Override 
public void actionPerformed(ActionEvent arg0) { 
    EventQueue.invokeLater(new Runnable()) { 
     @Override 
     public void run() { 
      generateNumbers(); 
      /*MyClass.this.*/ updateGUI(this.numbers1, numberlist); 
     } 
    }); 
} 
Смежные вопросы