使用 Gradle 构建程序并通过以下命令执行时,会生成空指针异常(注意:如果我从 IntelliJ IDE 中单击“运行”,程序可以正常工作):
java -jar main-1.0.jar
我尝试了 Link 中提供的解决方案这与此案例类似,但没有解决问题。
我还尝试了 Link 中提供的解决方案但即使这样也不能解决问题。
Gradle 脚本包含了我之前查询的解决方案 - Link
FXML 文件 (Sample.fxml) 位于 src/main/resources
希望所面临的问题是清楚的,并且有任何关于如何解决此问题的指示吗?
代码:
主要:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("/Sample.fxml"));
StackPane stackPane = new StackPane(root);
Scene scene = new Scene(stackPane);
primaryStage.setScene(scene);
primaryStage.show();
}
}
Gradle :
plugins {
id 'java'
id 'application'
id 'idea'
}
group 'testJavaFx'
version '1.0-SNAPSHOT'
sourceCompatibility = JavaVersion.VERSION_1_10
repositories {
mavenCentral()
}
sourceSets {
main {
resources {
srcDirs = ["src/main/resources"]
includes = ["**/*.fxml"]
}
}
}
dependencies {
compile 'org.openjfx:javafx-base:11:win'
compile 'org.openjfx:javafx-controls:11:win'
compile 'org.openjfx:javafx-fxml:11:win'
compile 'org.openjfx:javafx-graphics:11:win'
testCompile group: 'junit', name: 'junit', version: '4.12'
}
compileJava {
doFirst {
options.compilerArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'javafx.controls',
'--add-modules', 'javafx.fxml',
'--add-modules', 'javafx.base',
'--add-modules', 'javafx.graphics'
]
}
}
run {
doFirst {
jvmArgs = [
'--module-path', classpath.asPath,
'--add-modules', 'javafx.controls',
'--add-modules', 'javafx.fxml',
'--add-modules', 'javafx.base',
'--add-modules', 'javafx.graphics'
]
}
}
def jarPackage(String jarName, String className, artifactVersion) {
if (artifactVersion == "" || artifactVersion == null) {
artifactVersion = "1.0.0"
}
return tasks.create("jar${jarName}", Jar) {
baseName = jarName
version = artifactVersion
String pkgName = className.substring(0, className.lastIndexOf("."))
String pkgDir = pkgName.replaceAll("\\.", "/")
String clazzName = className.substring( className.lastIndexOf(".") +1 )
from(sourceSets.main.output) {
include "$pkgDir//**"
}
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes "Implementation-Title": "$clazzName",
"Implementation-Version": "$version",
"Main-Class": "$pkgName.$clazzName"
}
}
}
artifacts {
archives jarPackage("Main", "pkg1.Main" , "1.0")
}
最佳答案
通过删除 SourceSets(位于存储库下方)并在tasks.Create中添加以下代码来解决此问题
from(sourceSets.main.resources) {
includes = ["**/*.*"]
}
关于java - Gradle JavaFX - java.lang.NullPointerException : Location is required,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52927689/