You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX中getClass().getResource()加载fxml抛出空指针异常

问题原因

你遇到的NullPointerException: Location is required报错,核心原因是getClass().getResource("hello-view.fxml")返回了null,控制台打印的URL = null已经证实了这点:JVM在运行时类路径下找不到对应的fxml文件,本质是IntelliJ没有把你放在源码目录下的fxml文件打包到运行时类路径中。

解决步骤

方案1(推荐,符合Java项目标准规范)

调整项目目录为标准结构,从根源避免资源找不到的问题:

  • 在src目录下新建main/java目录,右键该目录选择Mark Directory as -> Sources Root,将原有src/main/gui/MainMenu.java移动到src/main/java/main/gui/路径下
  • 在src目录下新建main/resources目录,右键该目录选择Mark Directory as -> Resources Root
  • 在resources目录下新建和包名匹配的层级目录main/gui/,将hello-view.fxml移动到src/main/resources/main/gui/路径下
  • 给启动类补充main方法(高版本JDK+JavaFX需要显式声明),优化后的代码如下:
package main.gui;

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

import java.net.URL;

public class MainMenu extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        URL url = getClass().getResource("hello-view.fxml");
        if (url == null) {
            throw new RuntimeException("无法加载fxml资源,请检查资源目录配置");
        }
        Parent root = FXMLLoader.load(url);
        Scene scene = new Scene(root,1920,1080);
        stage.setTitle("Hello!");
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
  • 点击菜单栏Build -> Rebuild Project重新构建项目后再运行即可。

方案2(不调整现有目录)

如果你不想改动现有文件位置:

  • 右键src/main/gui目录,选择Mark Directory as -> Resources Root,把当前存放fxml的目录标记为资源根目录
  • 重新构建项目后运行即可。注意该方案会把gui目录下所有文件都当作资源处理,可能导致源码重复打包,仅适合临时测试使用。

注意:你原有代码中创建的第一个FXMLLoader fxmlLoader = new FXMLLoader(...)实例没有被使用,属于冗余代码,可以直接删除。

内容的提问来源于stack exchange,提问作者DIEGO IGLESIAS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 07:57:27