getClassLoader().getResource() 返回 null

2022-09-02 23:36:55

我有这个测试应用程序:

import java.applet.*;
import java.awt.*;
import java.net.URL;
public class Test extends Applet
{

    public void init()
    {
        URL some=Test.class.getClass().getClassLoader().getResource("/assets/pacman.png");
        System.out.println(some.toString());
        System.out.println(some.getFile());
        System.out.println(some.getPath());

    }
}

当我从Eclipse运行它时,我得到错误:

java.lang.NullPointerException
    at Test.init(Test.java:9)
    at sun.applet.AppletPanel.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

类路径(从 .类路径文件)

<classpathentry kind="src" path="src"/>

在我的c:\project\src文件夹中,我只有Test.java文件和包含pacman.png的“assets”目录。

我做错了什么,如何解决?


答案 1

从 中获取资源时,一开始不需要斜杠,因为一开始就不知道“相对”部分。仅当您从类的包级别获取相对路径的资源时,才需要它。ClassLoaderClass

此外,您不希望,因为它会得到Test.class,这将是.Test.class.getClass()Class<Class>

换句话说,请尝试以下任一行:

URL viaClass=Test.class.getResource("/assets/pacman.png");
URL viaLoader=Test.class.getClassLoader().getResource("assets/pacman.png");

答案 2

我会这样做:

final InputStream stream;

stream = Test.class.getResourceAsStream("assets/pacman.png");
System.out.println("Stream = " + stream);

“/assets/pacman.png”是一个绝对的位置,而“assets/pacman.png”是一个相对位置。


推荐