java - 在 Javafx 中找不到 fxml 文件

标签 java javafx fxml

我目前正在尝试遵循网络上的 Javafx 教程,但遇到了一些问题。 我有一个包含 3 个不同包的项目。 第一个是:ch.makery.address,它包含 Main 第二个是: ch.makery.model 目前是空的 第三个是:ch.makery.view,它包含 2 个不同的 fxml 文件,对应于两种不同的布局。 这是主要代码:

`package ch.makery.address;

import java.io.IOException;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class MainApp extends Application {

    private Stage primaryStage;
    private BorderPane rootLayout;

    @Override
    public void start(Stage primaryStage) {
        this.primaryStage = primaryStage;
        this.primaryStage.setTitle("AddressApp");

        initRootLayout();

        showPersonOverview();
    }

    /**
     * Initializes the root layout.
     */
    public void initRootLayout() {
        try {
            // Load root layout from fxml file.
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(MainApp.class.getResource("view/RootLayout.fxml"));
            rootLayout = (BorderPane) loader.load();

            // Show the scene containing the root layout.
            Scene scene = new Scene(rootLayout);
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * Shows the person overview inside the root layout.
     */
    public void showPersonOverview() {
        try {
            // Load person overview.
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(MainApp.class.getResource("view/PersonOverview.fxml"));
            AnchorPane personOverview = (AnchorPane) loader.load();

            // Set person overview into the center of root layout.
            rootLayout.setCenter(personOverview);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * Returns the main stage.
     * @return
     */
    public Stage getPrimaryStage() {
        return primaryStage;
    }

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

这是它返回的错误:


Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$156(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Location is not set.
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.load(Unknown Source)
    at ch.makery.adress.MainApp.initRootLayout(MainApp.java:35)
    at ch.makery.adress.MainApp.start(MainApp.java:22)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$null$174(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(Unknown Source)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$149(Unknown Source)
    ... 1 more
Exception running application ch.makery.adress.MainApp

据我了解,查找 fxml 文件时似乎存在问题。但我不明白为什么。 如果有人能帮助我,那就完美了 谢谢

(抱歉,如果我的英语有任何错误,这不是我的母语)

最佳答案

如果您的 Main 位于 ch.makery.address 中,而您的 fxml 位于 ch.makery.view 中,那么这是错误的:

view/RootLayout.fxml

当它尝试从 ch.makery.address.view 加载文件时。

尝试

../view/RootLayout.fxml

相反。 (与 PersonOverview 相同)

关于java - 在 Javafx 中找不到 fxml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32311019/

相关文章:

设置 TextArea 和 StyleSheets/css 背景颜色的 Java 7 到 Java 8 问题

java - 如何在java中生成ZipFile

java - ESB/消息队列快速入门

Android 上的 Java : Does adding item to ConcurrentLinkedQueue copy it

java - Spring Web - 解码 URL 参数

java - @FXML 自定义组件注入(inject)不会实例化 Controller 中的变量并导致 NullPointerException

java - 以编程方式更改嵌套元素的 CSS 规则

java - 在 JavaFX 中使标签占据 HBox 上的所有可用空间

java - 如何使用相同的模型对象初始化 JavaFX Controller ?

java - JavaFx/FXML 中的 "Node"是什么?