【发布时间】:2016-03-10 10:50:48
【问题描述】:
我有以下问题:
我正在开发一个带有 IntelliJ IDEA 15 的 Java 8 应用程序,使用 JavaFX 作为 GUI,Gradle 作为构建自动化系统(虽然之前从未使用过 Gradle)。加载fxml文件时总是得到IllegalStateException“Location is not set”,原因是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
【问题讨论】:
-
试试斜杠 getResource("/gui.fxml")
-
@AdamSkywalker 将其更改为 getResource("/gui.fxml") 并将其移至资源文件夹即可解决问题,谢谢
-
有人用 java 11 试过这个吗?它总是为我返回 null
标签: java intellij-idea gradle java-8 illegalstateexception