在JavaFX Gradle项目中加载图像资源失败
将我的项目转换为Gradle项目后,我现在在尝试加载图像文件时遇到了一个问题,我将其移动到了“resources”目录。它们之前位于一个名为“graphics”的包中,与源代码的其他包位于同一父目录中,我在将它们加载到图像中时没有遇到问题,如下所示:在JavaFX Gradle项目中加载图像资源失败,java,gradle,javafx,classpath,classloader,Java,Gradle,Javafx,Classpath,Classloader,将我的项目转换为Gradle项目后,我现在在尝试加载图像文件时遇到了一个问题,我将其移动到了“resources”目录。它们之前位于一个名为“graphics”的包中,与源代码的其他包位于同一父目录中,我在将它们加载到图像中时没有遇到问题,如下所示: Image logo = new Image("/graphics/sce.png"); 这是旧的项目结构: src |-- graphics |-- gui |-- models |-- utils ├── src | └── main
Image logo = new Image("/graphics/sce.png");
这是旧的项目结构:
src
|-- graphics
|-- gui
|-- models
|-- utils
├── src
| └── main
| ├── java
| | └── sce
| | └── gui
| | └── SplashScreen.java
| └── resources
| └── images
| └── sce.png
这是新的结构:
src
|-- graphics
|-- gui
|-- models
|-- utils
├── src
| └── main
| ├── java
| | └── sce
| | └── gui
| | └── SplashScreen.java
| └── resources
| └── images
| └── sce.png
我在结构中包括了SplashScreen.java,因为它是在程序中加载图像的第一个点。我尝试了多种加载图像的方法,包括上面的旧方法和以下方法:
Image logo = new Image(...);
1. SplashScreen.class.getResource("/images/sce.png").toExternalForm()
2. SplashScreen.class.getClassLoader().getResource("/images/sce.png").toExternalForm()
3. getClass().getClassLoader().getResourceAsStream("/images/sce.png")
每次尝试都会产生一个NullPointerException,路径上有或没有前导“/”。将图像从“images”包移到父“resources”目录也没有什么区别,通过“(/)resources/images/sce.png”访问资源目录也没有什么区别
这是我的build.gradle文件供参考:
plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.8'
id 'org.beryx.jlink' version '2.12.0'
}
repositories {
mavenCentral()
}
javafx {
version = "13"
modules = [ 'javafx.controls' ]
}
mainClassName = "sce.gui.MainStage"
jlink {
options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
launcher {
name = 'sce'
}
}
我想知道我忽略了什么。为了记录在案,我通过创建一个新的Gradle项目并将文件移到另一个位置来转换该项目,如果这会导致问题的话