java - 在Eclipse中难以加载FXML文件

原文 标签 java eclipse javafx fxml scenebuilder

这是我在班上编写的一个班轮代码,用于将fxml文件链接到我正在处理的项目:

package application;

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.Pane;


public class towerOfHanoi extends Application implements Initializable 
{
    public static void main(String[] args) 
    {
        launch(args);
    }
    public void start(Stage primaryStage) throws Exception 
    {       
        try
        {
            Parent rootContainer = FXMLLoader.load(getClass().getResource("/application/userInterface.fxml"));
        Scene s=new Scene(rootContainer);
        primaryStage.setScene(s);
        //primaryStage.setTitle("Towers Of Hanoi");
        primaryStage.show();
        }
        catch(IOException e)
        {               
        //          e.printStackTrace();
        }
}

@Override
    public void initialize(URL arg0, ResourceBundle arg1) {
        // TODO Auto-generated method stub
    }
}


每当我尝试在Eclipse中运行它时,都不会发生任何事情。好像发生了什么一样,终止的正方形是红色的,但是我在scenebuilder中创建的UI没有显示。

****更新:
当我取消注释这段代码时,这是完整的堆栈跟踪:

Mar 14, 2017 4:01:49 PM javafx.fxml.FXMLLoader$ValueElement processValue
WARNING: Loading FXML document with JavaFX API of version 8.0.102 by JavaFX runtime of version 8.0.101
javafx.fxml.LoadException: No controller specified.
/F:/2nd%20Year%20College%20Stuff/Semester%202/Event-driven%20Programming/2nd%20Year%20Workspace/CA%202/bin/application/userInterface.fxml:44

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2597)
    at javafx.fxml.FXMLLoader.access$100(FXMLLoader.java:103)
    at javafx.fxml.FXMLLoader$Element.getControllerMethodHandle(FXMLLoader.java:557)
    at javafx.fxml.FXMLLoader$Element.processEventHandlerAttributes(FXMLLoader.java:599)
    at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:770)
    at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2823)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2532)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
    at application.towerOfHanoi.start(towerOfHanoi.java:29)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
    at java.lang.Thread.run(Unknown Source)

最佳答案

如错误所示:您需要将控制器与.fxml关联,如下所示:

FILE userInterface.fxml(除了BorderPane可以有另一个容器,但它是相同的,它必须在根父目录上)

<BorderPane fx:id="background" fx:controller="application.Controller">
  //Content ...
</BorderPane>


您可以将Controller设置为fxml(参见上文),也可以通过SceneBuilder将其设置为:

enter image description here



另外,将启动器和控制器分开将更加清晰,如下所示:

文件towerOfHanoi.java

public class towerOfHanoi extends Application{
    public static void main(String[] args){
        launch(args);
    }
    public void start(Stage primaryStage) throws Exception{       
        try{
            Parent rootContainer = FXMLLoader.load(getClass().getResource("/application/userInterface.fxml"));
            Scene s=new Scene(rootContainer);
            primaryStage.setScene(s);
            //primaryStage.setTitle("Towers Of Hanoi");
            primaryStage.show();
        }
        catch(IOException e){               
        //          e.printStackTrace();
        }
    }
}


文件Controller.java

public class Controller implements Initializable {
    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {
        // TODO Auto-generated method stub
    }
}

关于java - 在Eclipse中难以加载FXML文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42790107/

相关文章:

java - 我如何最好地 catch Java 的最新发展?

java - JAVA片段:输出说明

linux - eclipse 火星中不可配置的空间数量

javafx - 如何实现对treetableview的过滤

java - 在Eclipse IDE中定义新的Java模板

java - Eclipse Package Explorer与物理文件夹结构不匹配

eclipse - 如何将网络应用程序部署到Google App Engine中

eclipse - Eclipse Juno 和 Neon 中的错误 - 无法再次打开控制台 View

java - 如何同时使用 org.joda.time.LocalDate 和 java.time.LocalDate ;

java - JavaFX单选按钮禁用/启用文本字段