在JavaFX Gradle项目中加载图像资源失败

时间:2019-11-26 19:23:02

标签: java gradle javafx classpath classloader

已经将我的项目转换为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项目并移走文件来转换该项目,如果那可能会导致问题的话。

0 个答案:

没有答案
相关问题