Java getClassLoader().getResource()返回null
我有这个测试应用程序:Java getClassLoader().getResource()返回null,java,applet,Java,Applet,我有这个测试应用程序: 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.p
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)
类路径(来自.Classpath文件)
在我的c:\project\src文件夹中,我只有Test.java文件和包含pacman.png的“assets”目录
我做错了什么以及如何解决它?从
类加载器
获取资源时,在开始时不需要斜杠,因为不知道要从“相对”部分开始。只有当您从类
获取资源时,才需要它,相对路径从类的包级别开始
此外,您不需要Test.class.getClass()
,因为它将获得Test.class的类,它将是class
换句话说,请尝试以下任一行:
URL viaClass=Test.class.getResource("/assets/pacman.png");
URL viaLoader=Test.class.getClassLoader().getResource("assets/pacman.png");
我会这样做:
final InputStream stream;
stream = Test.class.getResourceAsStream("assets/pacman.png");
System.out.println("Stream = " + stream);
“/assets/pacman.png”是绝对位置,“assets/pacman.png”是相对位置。- 使用
时,它会考虑 文件名的位置与调用文件名的位置相同 班级.getClass().getResource(文件名)
- 当您使用
时 认为文件名的位置是根,换句话说 垃圾箱文件夹.getClass().getClassLoader().getResource(文件名)
NullPointerException
资料来源:
package Sound;
public class ResourceTest {
public static void main(String[] args) {
String fileName = "Kalimba.mp3";
System.out.println(fileName);
System.out.println(new ResourceTest().getClass().getResource(fileName));
System.out.println(new ResourceTest().getClass().getClassLoader().getResource(fileName));
输出:
Kalimba.mp3
file:/C:/Users/User/Workspaces/MyEclipse%208.5/JMplayer/bin/Sound/Kalimba.mp3
file:/C:/Users/User/Workspaces/MyEclipse%208.5/JMplayer/bin/Kalimba.mp3
}
}
这对我很有用:
URL viaClass=Test.class.getResource(“assets/Test.html”)
哪些资产与Test.class输出文件位于同一文件夹中(经过痛苦的检查和调试)谢谢。我尝试了这两种方法,但都不起作用,但是现在它在第10行(这是第一行system.out.println)而不是第9行给出了一个异常。我已经确定图像在project/src/assets中…这意味着“some”为空。。。这意味着您没有正确获取资源。是的,那么我如何解决它?类路径是否不正确或我需要更改其他内容?请尝试将小程序方面的内容从等式中去掉-在控制台应用程序中运行相同的代码。但我正在构建一个小程序,以便在web浏览器中运行它,将其设为控制台是毫无意义的:(.必须有某种方法使其在小程序中工作?小程序如何使用图像?正如预期的那样,考虑到您的其他尝试都不起作用。类所在的包是什么?类文件在哪里?当我在eclipse中点击run时,.class放在c:\java\test\bin中。java在c:\java\test\src中,资产/文件夹也在中现在没有使用这个dir.No包,因为我只是想让它为我的另一个项目工作。谢谢assests dir需要在.class文件所在的位置
Kalimba.mp3
file:/C:/Users/User/Workspaces/MyEclipse%208.5/JMplayer/bin/Sound/Kalimba.mp3
file:/C:/Users/User/Workspaces/MyEclipse%208.5/JMplayer/bin/Kalimba.mp3
}
}