我一直在寻找将 FXML 和图像包含在 build.gradle
中的正确方法,以便将它们构建到 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
都在树中
这是输出树:
com
└───voidustries
└───poly
│ CustomFormatter.class
│ Main.class
│ PolyThreads.class
│ SysTray.class
│
└───gui
Controller.class
GUI.class
在 out 树中,它们都不存在,我已经摆弄了几个小时试图解决这个问题。任何帮助将不胜感激。
此外,如果您需要更多 here是Github仓库
最佳答案
只是为任何不满意的人添加我的三分钱:
在 src/main/resources (Windows src\main\resources) 下,您似乎必须使资源文件的“位置”匹配用于运行 .class 文件的类路径。
我通过在 JavaFX gradle 项目中使用 .fxml 文件得出结论(除非更有知识的人另有说法)。
Main
类(包含 main()
)位于名为“sample”的包中...因此 .java 文件的路径是...\EclipseWorkspace\TestFXexp\src\main\java\sample\Main.java.
这似乎意味着您的 .fxml 文件必须放在此处:...\EclipseWorkspace\TestFXexp\src\main\resources\sample\config.fxml。
gradle installdist
然后会正确打包 .jar 以进行部署。展开 .jar,您会发现 config.xml 已与 .class 文件一起放在目录 sample\下...并且 Main.class 文件能够找到并使用它。
当我像这样放置 config.fxml 时: ...\EclipseWorkspace\TestFXexp\src\main\resources\config.fxml ... 它不起作用:然后将 config.fxml 放在外面.jar文件和Main.class文件中的sample
包都找不到。
关于java - Gradle 不包括 FXML 和图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48941633/