0

Я пытаюсь выбрать первую строку в JTree, когда я ее создаю. Но иногда я получаю следующее исключение:JTree nullpointer loading первая строка

java.lang.NullPointerException 
    at javax.swing.plaf.basic.BasicTreeUI.completeEditing(BasicTreeUI.java:2035) 
    at javax.swing.plaf.basic.BasicTreeUI$Handler.valueChanged(BasicTreeUI.java:3715) 
    at javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(DefaultTreeSelectionModel.java:634) 
    at javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(DefaultTreeSelectionModel.java:1092) 
    at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPaths(DefaultTreeSelectionModel.java:293) 
    at javax.swing.JTree.setSelectionPaths(JTree.java:1644) 
    at javax.swing.JTree.setSelectionRows(JTree.java:1721) 
    at javax.swing.JTree.setSelectionRow(JTree.java:1696) 

перед вызовом tree.setSelectionRow (0) я пытаюсь поставить следующую проверку без какого-либо эффекта:

while((!tabTree.isVisible()) || (tabTree.isEditing()) || (tabTree.getRowCount() == 0)) { 
     try { 
      Thread.sleep(10); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 

    tabTree.setSelectionRow(0); 

Вы должны быть сохранены :)

любые предложения?

+2

Иногда? См. Также [* Начальные темы *] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html). – trashgod

+0

не то, что JTreeTable, для лучшей помощи, скорее, опубликуйте [SSCCE] (http://sscce.org/), короткий, выполнимый, компилируемый, только о JFrame, JTree и с жестко запрограммированным значением для JTree (как локальная переменная) – mKorbel

ответ

3

Это может быть вызван следующими причинами:

  • Вы используете редактор ячеек, который возвращает null в getTreeCellEditorComponent()
  • Вы изменить дерево в потоке без пользовательского интерфейса. См. Concurrency in Swing.
+2

На самом деле, из всех стандартных JComponents я обнаружил, что JTree наиболее подвержен ошибочному поведению, когда его методы вызывают или модифицируют его модель за пределами потока отправки событий AWT. – VGR

+0

Следуя руководству, вы публикуете, я вижу, что я вызываю setSelectionRow из другого потока. Теперь я пытаюсь поместить invokeLater в этот метод, чтобы отделить поток. большое спасибо –

Смежные вопросы