已经将我的项目转换为Gradle项目,现在尝试加载已移动到“ resources”目录的图像文件时遇到了问题。它们以前与源代码的其他程序包位于同一父目录中的“图形”程序包中,并且按以下方式将它们加载到Image中没有问题:
Image logo = new Image("/graphics/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项目并移走文件来转换该项目,如果那可能会导致问题的话。