Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaFX Gradle项目中加载图像资源失败_Java_Gradle_Javafx_Classpath_Classloader - Fatal编程技术网

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

在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

将我的项目转换为Gradle项目后,我现在在尝试加载图像文件时遇到了一个问题,我将其移动到了“resources”目录。它们之前位于一个名为“graphics”的包中,与源代码的其他包位于同一父目录中,我在将它们加载到图像中时没有遇到问题,如下所示:

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项目并将文件移到另一个位置来转换该项目,如果这会导致问题的话