无法加载资源,始终返回null

时间:2016-03-10 10:50:49

标签: java intellij-idea gradle java-8 illegalstateexception

我有以下问题:

我正在使用IntelliF IDEA 15开发Java 8应用程序,使用JavaFX作为GUI,Gradle作为构建自动化系统(之前从未使用过Gradle)。我总是得到IllegalStateException"位置未设置"加载fxml文件时,原因是getClass().getResource("gui.fxml")始终返回null

我的Java代码:

package minerva.gui;

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

public class Main extends Application {

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

    @Override
    public void start(Stage primaryStage) throws Exception {
        System.out.println(getClass().getResource("gui.fxml")==null); // DEBUG: always returns true, but why?

        FXMLLoader loader = new FXMLLoader(getClass().getResource("gui.fxml"));
        Parent root = (Parent) loader.load();
        primaryStage.setTitle("Minerva");
        primaryStage.setScene(new Scene(root));
        Controller control = loader.getController();
        primaryStage.show();
    }
}

也许Gradle对此负责,我不知道。

的build.gradle:

group 'minerva.impl'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.5

repositories {
    mavenCentral()
}

dependencies {
    compile 'org.hsqldb:hsqldb:2.3.1'
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

settings.gradle:

rootProject.name = 'minerva'

我还检查了IntelliJ设置中的资源模式,它们应该是有效的:!? .java;!? .form;!? .class;!? .groovy作为;!? .scala;!? .flex;!? .kt;!? .clj;!?* AJ

这里也是我结构的图像: Link to the image

1 个答案:

答案 0 :(得分:1)

Gradle具有与maven类似的项目结构,并在源和资源之间分离。 资源应放入src/main/resources

gui.fxml文件移到resource文件夹中,然后找到它。

您生成的工件放在$PROJECT/target中,如果您将来遇到类似问题,最好查看您的jar,war,ear或存档内容,以便查看文件按预期打包。