java - Gradle JavaFX - java.lang.NullPointerException : Location is required

标签 java gradle javafx build.gradle executable-jar

使用 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/

相关文章:

java - 使用 GridLayout 制作 JList

java - 对于大数字,从 DecimalFormat.format() 获取不正确的结果

java - 如何访问 Android 的默认哔声?

java - 如何从一组Gradle Java任务中分解出一组systemProperty调用?

string - 对 JavafX 中单个 TextArea 中的字符串应用不同的样式

java - 如何在 Java 中检查二维数组是否占对角线

android - 无法使用 Firebase 广告 : No static method zzc(Landroid/os/Bundle;

react-native - 任务构建失败:apptransformClasseswithJarMergingForDebug

java - 如果设置了 HijrahChronology,DatePicker 的 setDayCellFactory 中的 setDisable() 不起作用

css - 更改行边框颜色会引入一些奇怪的单元格移动