当前位置: 首页 > 知识库问答 >
问题:

IntelliJ Idea+JavaFX=class.getResource()返回null

苏边浩
2023-03-14

我知道,这里有很多类似的问题和类似的问题,但看了很多帖子后,我无法简单地解决这个问题。在Compiler>Resource Patterns下,我已经放入了这个字符串“*.fxml”。此外,我已经将resources文件夹标记为resources根。

这里可以看到我的项目结构:

这是我的MainView.java类。

package dataParser.View;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;


public class MainView extends Application {
    private Stage primaryStage;

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        this.primaryStage = primaryStage;

        FXMLLoader loader = new FXMLLoader();
        System.out.println(this.getClass().getResource("/MainView.fxml"));
        loader.setLocation(getClass().getResource("/MainView.fxml"));

        MainViewController mainViewController = new MainViewController();
        mainViewController.setMainApp(this);

        loader.setController(mainViewController);
        Parent layout = loader.load();

        Scene scene = new Scene(layout);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    Stage getPrimaryStage() {
        return primaryStage;
    }

}
    Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:973)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:198)
    at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.IllegalStateException: Location is not set.
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2459)
    at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435)
    at dataParser.View.MainView.start(MainView.java:29)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:919)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(PlatformImpl.java:449)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(PlatformImpl.java:418)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:417)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
    ... 1 more

共有1个答案

蒋默
2023-03-14

过了一段时间,我找到了一个解决这个棘手问题的方法,我将尽力在这里解释它。

首先,我已经设置了我的项目结构(文件>项目结构...)以适当的方式定义源文件夹和资源文件夹,以便IntelliJ Idea能够找到它们。此外,我还检查了我的资源文件是否正确地放入了“build”和“out”文件夹(Gradle和IntelliJ在构建过程中使用了它们):我还通过将我的“filesettingscompiler”设置在许多堆栈溢出答案中精确定位来实现了这一点。
最后,我在调用我的资源文件时使用了这个结构:

FXMLLoader loader = new FXMLLoader();
System.out.println(MainView.class.getResource("/fxml/MainView.fxml"));
loader.setLocation(MainView.class.getResource("/fxml/MainView.fxml"));

我想指出我的“fxml”文件夹的根文件夹是“resources”。

 类似资料:
  • 问题内容: 我正在使用以下命令获取此特定文件的URL,但它返回null。是否有人对问题有任何建议或其他替代方法? 问题答案: 对于那些使用Intellij Idea的用户:检查设置->编译器->资源模式。 该设置包含所有应解释为资源的扩展。如果扩展不符合此处的任何模式,则class.getResource将为使用此扩展的资源返回null。

  • 问题内容: 我刚刚开始使用JavaFX Scene Builder来构建一个小型应用程序。 它由属于“ login.fxml”的控制器类“ Login.java”组成,其中通过称为“ registrationClicked(ActionEvent event)”的方法加载了FXML文件“ registrierung.fxml”: 现在,我想通过根节点vboxRoot引用控制器类“ Registri

  • 我刚刚开始使用JavaFX Scene Builder来构建一个小型应用程序。 它由属于login.fxml的控制器类Login.java组成,其中FXML文件registrierung.fxml通过名为注册点击(动作事件)的方法加载: 现在我想参考一下“registrierung”的阶段。fxml“在控制器类”注册表中。java“通过根节点vboxRoot: 但是,“getScene()”总是导

  • 代码: 这里的问题是:lowEndDate和highEndDate总是为null,不管输入是什么。

  • 问题内容: 我创建了一个简单的JavaFX应用程序,该应用程序在TextField中接收来自用户的输入。我将来自SceneBuilder的KeyTyped事件附加到控制器。我的函数如下所示: 当我键入回车键时,此功能始终打印出UNDEFINED。有想法该怎么解决这个吗?我键入的其他字母似乎也有相同的问题。 问题答案: 是一个特殊事件。它没有但已设置。 请参见字母“ a”的示例: 和javadoc:

  • DatePicker在更改日期之后没有更新。 另外,我尝试了在没有侦听器的情况下获取数据,比如: 也许有人有类似的问题,并找到了解决办法? 编辑1: