【问题标题】:JavaFX fxml loader does not work properlyJavaFX fxml 加载器无法正常工作
【发布时间】:2016-02-06 05:09:07
【问题描述】:

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(); 但我不知道如何解决这个问题,有人可以帮忙吗?

【问题讨论】:

  • 显示整个堆栈跟踪而不是打印消息“错误”
  • 请将System.out.println("Error"); 替换为e.printStackTrace()。然后再次运行程序并告诉我们输出。

标签: java model-view-controller javafx loader


【解决方案1】:

fx:controller 属性的值很可能是错误的(除非您的控制器类与发布的控制器类不同)

您要使用的控制器:testFX.view.testFXController

fxml 中的属性值:view.testFXController != testFX.view.testFXController

假设问题中的信息没有无法重现的其他错误,修复属性值应该可以工作。

【讨论】:

    【解决方案2】:

    fxml 文件中的fx:controller 属性是这里的罪魁祸首。

    fx:controller="application.Controller" 为我工作。

    因此,fx:controller="testFX.view.testFXController" 应该适合你。

    【讨论】:

      猜你喜欢
      • 2017-02-08
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 2014-02-03
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      相关资源
      最近更新 更多