用于fxml的javafx getResources始终返回null
我有一个Gradle/JavaFX项目,我试图通过getResources加载一个fxml,但它总是返回null。 生成时,文件会被复制到正确的文件夹中。 我不知道类路径是否有问题。 我正试图用IntelliJ Idea来运行这个 项目结构 下面是我尝试加载它的类:用于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(); 最
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运行它并删除源集是有效的。