
本文旨在解决JavaFX程序打包成JAR文件后,FXML文件无法正确加载的问题。通过分析资源文件加载方式和构建配置,提供确保FXML文件包含在JAR包中的方法,并给出相应的代码示例和注意事项,帮助开发者避免类似错误,成功发布可执行的JavaFX应用程序。
当JavaFX程序在IDE中运行时能够正常加载FXML文件,但打包成JAR文件后却出现java.lang.IllegalStateException: Location is not set 错误,这通常意味着FXML文件没有被正确地包含在JAR文件中,或者在JAR包中FXML文件的路径与代码中指定的路径不一致。
解决此问题的关键在于确保以下两点:
在IntelliJ IDEA中,可以通过以下步骤将resources文件夹添加到Artifact中:
立即学习“Java免费学习笔记(深入)”;
通过以上步骤,可以将resources文件夹及其所有内容(包括FXML文件)添加到JAR包中。构建项目后,打开JAR文件,应该能在JAR包中看到resources文件夹和其中的FXML文件。
在Java代码中,加载FXML文件时,需要使用正确的路径。如果FXML文件位于src/main/resources/plop目录下,那么在JAR包中,FXML文件的路径应该是/plop/SceneOuverture.fxml。
因此,加载FXML文件的代码应该修改为:
Parent root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/plop/SceneOuverture.fxml")));
Scene scene = new Scene(root);注意,这里使用了绝对路径/plop/SceneOuverture.fxml,确保从JAR包的根目录开始查找FXML文件。
以下是一个完整的示例,展示了如何正确加载FXML文件:
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import java.util.Objects;
public class MainApp extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/plop/SceneOuverture.fxml")));
primaryStage.setTitle("My Application");
primaryStage.setScene(new Scene(root, 600, 400));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}在这个示例中,MainApp类加载位于/plop/SceneOuverture.fxml的FXML文件,并将其设置为主舞台的场景。
解决JavaFX JAR包中FXML文件缺失的问题,需要确保资源文件被正确地包含在JAR包中,并且在代码中使用正确的路径来加载FXML文件。通过仔细检查构建配置和代码,可以避免类似错误,成功发布可执行的JavaFX应用程序。
以上就是解决JavaFX JAR包中FXML文件缺失问题的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号