Java 获取资源时出现NullPointerException

Java 获取资源时出现NullPointerException,java,nullpointerexception,resources,Java,Nullpointerexception,Resources,以下代码将在uri=… 我尝试了ClassLoader.getSystemResource,getClass().getResource或getClass().getClassLoader().getResource 不管我是在开始还是结束时删除/,它仍然会生成NullPointerException public class Main { public static void main(String[] args) { new Main(); } pr

以下代码将在
uri=…

我尝试了
ClassLoader.getSystemResource
getClass().getResource
getClass().getClassLoader().getResource

不管我是在开始还是结束时删除/,它仍然会生成NullPointerException

public class Main {
    public static void main(String[] args) {
        new Main();
    }

    private Main() {
        URI uri = null;

        try {
            uri = ClassLoader.getSystemResource("/resources/images/flags/").toURI();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

        if (uri != null) {
            System.out.println(uri.toString());

            File folder = new File(uri);

            for (File file : folder.listFiles()) {
                System.out.println(file.getName());
            }
        }
    }
}
项目结构:

请尝试不使用“资源”,因为这只是文件夹的名称。 此文件夹的内容将被复制到已编译的类中。

请尝试不使用“资源”,因为这只是文件夹的名称。
此文件夹的内容将被复制到已编译的类中。

这是我的评论的答案。由于
resource
已经是类路径的一部分,您必须更改:

"/resources/images/flags/" 


此外,您还可以尝试相对路径,如
“images/flags/”

这是我的评论的答案。由于
resource
已经是类路径的一部分,您必须更改:

"/resources/images/flags/" 


此外,您还可以尝试相对路径,如
“images/flags/”

是否尝试将
“/resources/images/flags/”
更改为
“/images/flags/”
部分?resources目录是classpathUsed
images/flags/
的一部分,它工作正常!如果您从.jar文件运行此代码,它将失败。@VGR您能解释一下吗?.jar文件实际上是一个zip归档文件,其中包含一些特定于Java的条目。当类和资源位于存档中时,它们不是单独的文件,只是存档中字节的子序列。这意味着.jar中此类资源的URI不是
文件:
URI,因此尝试将其转换为文件将引发异常。请参阅。您是否尝试将
“/resources/images/flags/”
更改为
“/images/flags/”
部分?resources目录是classpathUsed
images/flags/
的一部分,它工作正常!如果您从.jar文件运行此代码,它将失败。@VGR您能解释一下吗?.jar文件实际上是一个zip归档文件,其中包含一些特定于Java的条目。当类和资源位于存档中时,它们不是单独的文件,只是存档中字节的子序列。这意味着.jar中此类资源的URI不是
文件:
URI,因此尝试将其转换为文件将引发异常。请参阅。这是两个文件夹图像/标志。这是两个文件夹图像/标志