Java JTree空指针加载第一行

Java JTree空指针加载第一行,java,swing,nullpointerexception,jtree,event-dispatch-thread,Java,Swing,Nullpointerexception,Jtree,Event Dispatch Thread,我试图在创建JTree时选择它的第一行。 但有时我会遇到以下例外情况: 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.

我试图在创建JTree时选择它的第一行。 但有时我会遇到以下例外情况:

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);
您需要保存:)

有什么建议吗?

这可能是由以下原因引起的:

  • 您正在使用一个自定义单元格编辑器,它在
    getTreeCellEditorComponent()中返回
    null
  • 您可以在非UI线程中修改树。看
这可能是由以下原因引起的:

  • 您正在使用一个自定义单元格编辑器,它在
    getTreeCellEditorComponent()中返回
    null
  • 您可以在非UI线程中修改树。看

有时?另请参阅。为了获得更好的帮助,这不是JTreeTable吗?请尽快发布一个简短、可运行、可编译的JFrame、JTree以及JTree的硬编码值(作为局部变量)?另请参见。要获得更好的帮助,JTreeTable不是吗?请尽快发布一个简短、可运行、可编译的JFrame、JTree,并使用JTree的硬编码值(作为局部变量)事实上,在所有标准的jcomponent中,我发现JTree在调用其方法或修改其模型时最容易出现不稳定的行为,在AWT事件调度线程之外。按照您发布的指南,我看到我从另一个线程调用了setSelectionRow。现在,我尝试将invokeLater放入该方法中以分离线程。事实上,在所有标准JC组件中,我发现在AWT事件分派线程之外调用JTree的方法或修改其模型时,JTree最容易出现不稳定的行为。按照您发布的指南,我看到我从另一个线程调用setSelectionRow。现在,我尝试将invokeLater放入该方法中以分离线程。谢谢