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

JavaFX启动窗口报错java.lang.IllegalStateException: Location未设置

JavaFX FXML文件加载失败(getResource返回null)问题排查与解决

我正在使用纯Eclipse IDE开发JavaFX客户端-服务端程序,项目结构如下:
项目结构

问题代码

LoginController中用于打开窗口的代码:

public void start(Stage primaryStage) throws IOException {
        FXMLLoader loader = new FXMLLoader(getClass().getResource("fxml/login.fxml"));
        System.out.println(getClass().getResource("/fxml/login.fxml"));
        Parent root = loader.load();

        Scene scene = new Scene(root);
        primaryStage.setTitle("EasyFit login");
        primaryStage.setScene(scene);
        primaryStage.setResizable(false);
        primaryStage.show();
    }

错误信息

控制台输出getResource结果为null,同时抛出以下异常:

null
Exception in Application start method
java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1082)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
    at java.base/java.lang.Thread.run(Thread.java:833)
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 client.gui.controllers.LoginController.start(LoginController.java:105)
    at client.ClientUI.start(ClientUI.java:29)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
    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:174)
    ... 1 more
Exception running application client.ClientUI

已尝试使用/、../、无/或完整路径等写法均无效,寻求解决方案。


解决方案

1. 确认FXML文件的编译输出路径

  • 右键项目 → Properties → Java Build Path → Source标签,检查client源文件夹的输出目录是否正确(默认是bin或target/classes)
  • 确保编译后,fxml文件夹及其内容被复制到类路径根目录下(即编译输出目录中存在/fxml/login.fxml)

2. 正确使用类路径资源引用

根据LoginController的包路径client.gui.controllers,有两种有效引用方式:

  • 绝对路径(推荐):从类路径根目录开始查找,使用getClass().getResource("/fxml/login.fxml")
  • 相对路径:从当前类的包目录往上回溯,使用getClass().getResource("../../fxml/login.fxml")(两级回溯到类路径根,再定位fxml文件夹)

3. 验证FXML文件的实际位置与命名

  • 确认fxml文件夹确实位于client源文件夹的根目录下,而非嵌套在其他子文件夹中
  • 检查文件名大小写(Java类路径资源区分大小写,确保login.fxml拼写完全匹配)

4. 清理并重建项目

  • 执行Eclipse菜单:Project → Clean...,选择当前项目进行清理
  • 重新执行Build Project,确保所有资源文件被正确复制到编译输出目录

内容的提问来源于stack exchange,提问作者Din Salman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:17:22