用于fxml的javafx getResources始终返回null

用于fxml的javafx getResources始终返回null,java,gradle,javafx,javafx-11,Java,Gradle,Javafx,Javafx 11,我有一个Gradle/JavaFX项目,我试图通过getResources加载一个fxml,但它总是返回null。 生成时,文件会被复制到正确的文件夹中。 我不知道类路径是否有问题。 我正试图用IntelliJ Idea来运行这个 项目结构 下面是我尝试加载它的类: public类主扩展应用程序{ 公共静态void main(字符串[]args){ 发射(args); } @凌驾 公共无效开始(阶段primaryStage){ 试一试{ FXMLLoader=新的FXMLLoader(); 最

我有一个Gradle/JavaFX项目,我试图通过getResources加载一个fxml,但它总是返回null。 生成时,文件会被复制到正确的文件夹中。 我不知道类路径是否有问题。 我正试图用IntelliJ Idea来运行这个

项目结构

下面是我尝试加载它的类:

public类主扩展应用程序{
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
公共无效开始(阶段primaryStage){
试一试{
FXMLLoader=新的FXMLLoader();
最终URL资源=getClass().getClassLoader().getResource(“/dashboard.fxml”);
loader.setLocation(资源);
AnchorPane root=loader.load();
原始阶段。设置场景(新场景(根,300250));
primaryStage.show();
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
我还尝试了
getClass().getResource(“/dashboard.fxml”)
Main.class.getResource(“/dashboard.fxml”)

这是我的身材,格雷德尔

plugins {
    id 'java'
    id 'application'
    id 'org.openjfx.javafxplugin' version '0.0.9'
}

group 'swe4'
version '1.0-SNAPSHOT'

sourceSets {
    main {
        java {
            srcDirs = ["src/main/java"]
        }
        resources {
            srcDirs = ["src/main/resources"]
        }
    }
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

test {
    useJUnitPlatform()
}

javafx {
    version = "15.0.1"
    modules = ['javafx.controls', 'javafx.fxml']
}

看来类路径确实有问题,因为输出资源文件夹没有添加到其中。当我改变结构时,它就起作用了。格雷德给他的“哈克”。sourceset{main.output.resourcesDir=main.java.outputDir}注意,您不需要在
sourceset{…}
中进行配置。您在那里所做的已经由完成了(顺便说一句,它是由隐式添加的)。我不知道去掉
sourceSets{…}
块是否能解决您的问题,但您还是应该去掉它。另外,您的图像显示资源已复制到输出文件夹。但您检查的输出文件夹错误。IntelliJ使用
out
文件夹。Gradle使用的是
build
文件夹。由于您应该将所有构建操作(包括运行项目)委派给Gradle,因此您需要检查
build
文件夹。事实上,您直接使用IntelliJ运行项目可能是问题的根源。尝试执行
/gradlew run
,看看是否有效(不过首先需要配置
应用程序
插件,以便它知道主类)。谢谢,似乎我只有在尝试使用intellij而不是gradle运行时才有问题。使用gradle运行它并删除源集是有效的。