无法加载资源,总是 returns null
Can't load resource, always returns null
我有以下问题:
我正在使用 IntelliJ IDEA 15 开发一个 Java 8 应用程序,使用 JavaFX 作为 GUI 和 Gradle 作为构建自动化系统(尽管之前从未使用过 Gradle ).我总是在加载 fxml 文件时得到 IllegalStateException
"Location is not set",原因是因为 getClass().getResource("gui.fxml")
总是 returns 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;!?[=34= .kt;!?.clj;!?*.aj
这也是我的结构图:
Gradle 具有与 Maven 类似的项目结构,并且在源和资源之间进行分隔。
资源应放入 src/main/resources
.
将您的 gui.fxml
文件移动到 resource
文件夹中,应该可以找到它。
您生成的工件放在 $PROJECT/target
中,如果您以后遇到类似的问题,最好查看您的 jar,war,ear
或任何存档以查看,如果文件按预期打包。
我有以下问题:
我正在使用 IntelliJ IDEA 15 开发一个 Java 8 应用程序,使用 JavaFX 作为 GUI 和 Gradle 作为构建自动化系统(尽管之前从未使用过 Gradle ).我总是在加载 fxml 文件时得到 IllegalStateException
"Location is not set",原因是因为 getClass().getResource("gui.fxml")
总是 returns 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;!?[=34= .kt;!?.clj;!?*.aj
这也是我的结构图:
Gradle 具有与 Maven 类似的项目结构,并且在源和资源之间进行分隔。
资源应放入 src/main/resources
.
将您的 gui.fxml
文件移动到 resource
文件夹中,应该可以找到它。
您生成的工件放在 $PROJECT/target
中,如果您以后遇到类似的问题,最好查看您的 jar,war,ear
或任何存档以查看,如果文件按预期打包。