2015-05-11 6 views
0

У меня есть следующие классы:Простой JavaFX TreeView бросает NullPointer Exception

Главная:

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); 
    } 
} 

TreeController:

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> 

Теперь У меня проблема в том, что он будет бросать исключение NullPointer в tree.setRoot(root);

И в ConstructLoad Exception в мой Главное в:

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

Я все еще учусь этот материал, но мне сказали, что при использовании FXML, вы не нужно инициализировать TreeViews с помощью «new», поскольку аннотация @FXML уже позаботится об этом с помощью tree.setRoot (root).

Извините за такой вопрос noobish, но я занимаюсь поиском в течение последних 2 часов и не стал более мудрее.

+0

Я вижу только одну строку в файле view2.fxml? – Buddy

ответ

1

Я все еще учусь этот материал, но мне сказали, что при использовании FXML, вам не нужно инициализировать TreeViews с помощью «нового», как @FXML аннотаций будет уже заботиться об этом с tree.setRoot (корень).

Вы угадали, но для того, чтобы JavaFX к впрыснуть ваш Treeview (= сделать "новый" для вас), вы должны объявить что-то вроде:

<Treeview fx:id="tree" /> 

в view2.fxml.

С атрибутом fx: id, установленным под тем же именем, что и переменная Treeview в коде Java.