java - 简单的 Javafx TreeView 抛出空指针异常

标签 java nullpointerexception treeview javafx-2 fxml

我有以下类(class):

主要:

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{

        BorderPane root = FXMLLoader.load(getClass().getResource("../view/PersonOverview.fxml"));

        AnchorPane view2 = FXMLLoader.load(getClass().getResource("../view/view2.fxml"));
        root.setLeft(view2);

        primaryStage.setScene(new Scene(root, 1000, 600));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args); 
    }
}

树 Controller :

public class TreeController implements Initializable {

     //Set icon for folder
     Node folderIcon = new ImageView(new Image(this.getClass().getResourceAsStream("../icon/icon.jpg")));

     //Set root
     TreeItem<String> root; 

     @FXML TreeView<String> tree;

     //Set other Items
     private TreeItem<String> item1 = new TreeItem<String>("item1", folderIcon);
     private TreeItem<String> item2 = new TreeItem<String>("item2", folderIcon);
     private TreeItem<String> item3 = new TreeItem<String>("item3", folderIcon);
     private TreeItem<String> item4 = new TreeItem<String>("item4", folderIcon);
     private TreeItem<String> item5 = new TreeItem<String>("item5", folderIcon);

     //Add Children to root
     private void makeChildren() {
         root.getChildren().add(item1);
         root.getChildren().add(item2);
         root.getChildren().add(item3);
         root.getChildren().add(item4);
         root.getChildren().add(item5);
     }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        root = new TreeItem<String>("root", folderIcon);
        makeChildren();
        root.setExpanded(true);
        tree.setRoot(root);
    } 
}

当然还有我的 view2 fxml 文件:

    <AnchorPane
        maxHeight="-Infinity" maxWidth="-Infinity"
        minHeight="-Infinity" minWidth="-Infinity"
        prefHeight="400.0" prefWidth="354.0"
        xmlns="http://javafx.com/javafx/8.0.40"
        xmlns:fx="http://javafx.com/fxml/1"
        fx:controller="control.TreeController">
      <children>
      <TreeView
        layoutX="69.0" layoutY="118.0" 
        prefHeight="400.0" prefWidth="354.0" 
        AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" 
        AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
      </children>
   </AnchorPane>

现在我遇到的问题是它会在 tree.setRoot(root);

处抛出空指针异常

我的 Main 中出现一个 ConstructLoad 异常:

AnchorPane view2 = FXMLLoader.load(getClass().getResource("../view/view2.fxml"));

我仍在学习这些东西,但有人告诉我,使用 FXML 时,不需要使用“new”初始化 TreeView,因为 @FXML 注释已经使用 tree.setRoot(root) 处理了这个问题。

很抱歉问了这样一个新手问题,但我在过去的 2 个小时里一直在谷歌上搜索,但没有得到任何启发。

最佳答案

I'm still learning this stuff but I was told that when using FXML, you don't need to initialize TreeViews using "new" as the @FXML annotation will already take care of this with tree.setRoot(root).

您猜对了,但是为了让 JavaFX 注入(inject)您的 Treeview(= 为您创建"new"),您需要声明如下内容:

<Treeview fx:id="tree" />

在view2.fxml中。

fx:id 属性设置为与 Java 代码中的 Treeview 变量同名。

关于java - 简单的 Javafx TreeView 抛出空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30170164/

相关文章:

java - 使用 fragmentstatepageradapter 的 nullpointerexception

delphi - 如何使 TTreeView 在禁用时不突出显示所有节点?

c# - 如何仅扩展 Treeview 的一级子级

java - 通过 RFC 5987 处理带空格的文件名*参数导致文件名中的 '+'

java - Exoplayer 在全屏模式下有意启动它

java - 使用带有 fragment 的部分,NullPointerException

java - 在 JSP 中编写 Hibernate 查询会给出 java.lang.NullPointerException

Java - 如何从 HashMap 中找到最接近特定数字的值?

java - 在 Android 上使用 JCIFS 库时在 URL 中使用 SMB 协议(protocol)

c# - TreeView、HierarchicalDataTemplate 和递归数据