Загрузчик JavaFX fxml не работает должным образом
testFX.java:
public class testFX extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
try{
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("/testFX/view/test.fxml"));
System.out.println("after set location");
//PROBLEM
AnchorPane root = (AnchorPane)loader.load();
System.out.println("Does not happen");
testFXController listController = loader.getController();
listController.start();
Scene scene = new Scene(root, 200, 300);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
}
catch (Exception ex){
System.out.println("Error");
}
}
public static void main(String[] args) {
launch(args);
}
}
testFXController.java:
package testFX.view;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.ListView;
public class testFXController {
@FXML ListView<String> listView;
private ObservableList<String> obsList;
public void start() {
// create an ObservableList
// from an ArrayList
obsList = FXCollections.observableArrayList("Giants", "Patriots", "Jaguars");
listView.setItems(obsList);
}
}
test.fxml:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.control.ListView?>
<AnchorPane xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="view.testFXController">
<ListView fx:id="listView"
AnchorPane.topAnchor="10"
AnchorPane.leftAnchor="10"
AnchorPane.rightAnchor="10"
AnchorPane.bottomAnchor="10" />
</AnchorPane>
Когда я запускаю testFX.java, система печатает:
after set location
Error
Это код профессора, и я не могу его запустить. Я понял, что главная проблема в строке кода AnchorPane root = (AnchorPane)loader.load();
но я понятия не имею, как это исправить, кто-то может помочь?
1 ответ
Значение fx:controller
Атрибут, скорее всего, неверен (если у вас нет другого класса контроллера, чем тот, который был опубликован)
Контроллер, который вы хотите использовать: testFX.view.testFXController
Значение атрибута в fxml: view.testFXController
знак равно testFX.view.testFXController
Предполагая, что нет другой ошибки, которая не может быть воспроизведена с информацией в вопросе, исправление значения атрибута должно работать.
В fx:controller
Атрибут в файле fxml является виновником.
fx:controller="application.Controller"
работал у меня.
Следовательно, fx:controller="testFX.view.testFXController"
должен работать на вас.