【发布时间】:2018-08-03 03:25:36
【问题描述】:
我一直在寻找在build.gradle 中包含 FXML 和图像的正确方法,以便将它们构建到 jar 中。我已经查看here 并尝试过,但它仍然无法正常工作。
抛出此错误:java.lang.NullPointerException: inputStream is null.
这里是build.gradle (Github):
group 'com.voidustries'
version '1.0-SNAPSHOT'
sourceSets {
main {
resources {
srcDirs = ["src/main/java/com/voidustries/poly"]
includes = ["gui/layoutForm.fxml"]
}
}
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.junit.platform:junit-platform-gradle-plugin:1.1.0'
}
}
apply plugin: 'java'
apply plugin: 'org.junit.platform.gradle.plugin'
repositories {
mavenCentral()
}
dependencies {
testCompile('org.junit.jupiter:junit-jupiter-api:5.1.0')
testRuntime('org.junit.jupiter:junit-jupiter-engine:5.1.0')
}
task wrapper(type: Wrapper) {
description = 'Generates gradlew[.bat] scripts'
gradleVersion = '4.3.1'
}
test {
testLogging {
events "passed", "skipped", "failed"
}
}
这里是 GUI.java (Github):
FXMLLoader loader = new FXMLLoader();
FileInputStream fis = new FileInputStream(settings);
ResourceBundle resourceBundle = new PropertyResourceBundle(fis);
loader.setResources(resourceBundle);
Parent root = loader.load(getClass().getResourceAsStream("layoutForm.fxml"));
Platform.setImplicitExit(false);
堆栈跟踪表明loader.load(getClass().getResourceAsStream("layoutForm.fxml")); 导致错误
这里是源树:
com
└───voidustries
└───poly
│ CustomFormatter.java
│ Main.java
│ PolyThreads.java
│ SysTray.java
│
├───gui
│ Controller.java
│ GUI.java
│ Icon.png
│ layoutForm.fxml
│
└───img
Icon.png
你可以看到layoutForm.fxml和Icon.png都在树中
这是 Out 树:
com
└───voidustries
└───poly
│ CustomFormatter.class
│ Main.class
│ PolyThreads.class
│ SysTray.class
│
└───gui
Controller.class
GUI.class
在输出树中,它们都不存在,我已经摆弄了几个小时试图解决这个问题。任何帮助将不胜感激。
另外,如果您需要更多 here 是 Github 存储库
【问题讨论】:
-
您是否尝试过将 FXML 和图像文件放在
resources文件下,而不是将它们放在源文件下?即遵循标准的 Maven 项目布局文件结构。 -
Maven 标准直接布局:maven.apache.org/guides/introduction/…
-
@Kerry OP 显然在使用 gradle,为什么要将它们发送到 maven 文档?
-
@lance-java 因为我认为 gradle 默认使用 Maven 文件结构?
-
是的,因为 Maven 文档中提到的
src/main/filters、src/assembly和src/site等不适用于 Gradle,可能会导致混淆。
标签: java gradle intellij-idea build continuous-integration