Java Project在IDE中运行良好,但不能作为Jar文件运行

时间:2018-01-21 14:41:55

标签: java javafx jar javafx-8 scenebuilder

对于我当前的Project,我需要一个指向不同FXML文件的文件路径。我相对较快地了解到这不能用绝对路径完成,所以我使用MainApp.class.getResource()来获取资源文件的相对路径。但是,我无法让它发挥作用。我的代码如下所示:

    public void initRootLayout() {
        try {
            // Load root layout from fxml file.
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(MainApp.class.getResource("../views/FXML/Root.fxml"));
            rootLayout = (BorderPane) loader.load();
            [...]

(在本例中,将Root.FXML文件加载到当前文件夹上方的一个文件夹中,在FXML文件夹中,该文件夹本身位于views文件夹中。

我的文件夹结构如下所示(我省略了此问题不需要的视图文件):

.
├── out
    ├── artifacts
        └── LagerGUI
            ├── LagerGUI.html
            ├── LagerGUI.jar
            └── LagerGUI.jnlp
    ├── logs
        └── log.txt
    └── production
        ├── Controllers
        ├── Logger
        ├── MainApp
        ├── META-INF
        ├── structs
        └── views


├── src
|   ├── MainApp
        └── MainApp.java
    └── views
        ├── Controllers
        └── FXML
            └──Root.FXML

当我在IDE中运行它时,一切都很完美。但是,当我尝试构建工件并从终端运行java -jar MyProject.jar时,我得到以下内容:

[...]
Caused by: java.lang.IllegalStateException: Location is not set.
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2434)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
    at MainApp.MainApp.initRootLayout(MainApp.java:226)
    at MainApp.MainApp.start(MainApp.java:213)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$106(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$119(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$117(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$118(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.lambda$null$450(GtkApplication.java:139)
    ... 1 more
Exception running application MainApp.MainApp

javafx中的哪个意味着无法找到loader.setLocation()中的位置网址。 有什么想法吗?

编辑此问题是重复:请注意,class.getResource方式适用于重复的问题,但在我的情况下不适用。

0 个答案:

没有答案