Java 访问.jar文件中的图像文件时出现NullPointerException

Java 访问.jar文件中的图像文件时出现NullPointerException,java,jar,classpath,Java,Jar,Classpath,我几乎什么都试过了,但还是有同样的问题。我有以下设置:我有一个images.jar,其中包含一个名为“images”的文件夹,其中有多个图像文件。我在eclipse中将images.jar添加到项目的java构建路径中,并尝试使用以下代码访问jar中的各个图像: URL url = this.getClass().getResource("images/a.png"); ImageIcon icon = new ImageIcon (url); 不幸的是,URL对象总是空的。我认为这与我在ec

我几乎什么都试过了,但还是有同样的问题。我有以下设置:我有一个images.jar,其中包含一个名为“images”的文件夹,其中有多个图像文件。我在eclipse中将images.jar添加到项目的java构建路径中,并尝试使用以下代码访问jar中的各个图像:

URL url = this.getClass().getResource("images/a.png");
ImageIcon icon = new ImageIcon (url);

不幸的是,URL对象总是空的。我认为这与我在eclipse中将images.jar文件添加到类路径时将其放在何处无关。我也尝试过使用路径“/images/a.png”,但仍然存在相同的问题。任何建议都将非常受欢迎!谢谢。

我无法重现您的问题,但我的理论是,您运行该类的位置与您想象的不同——图像和类位于不同的罐子中,或者直接从类文件读取该类。

尝试以下操作:

URL url = this.getClass().getClassLoader().getResource("images/a.png");
ImageIcon icon = new ImageIcon(url);

没有
getClassLoader()
调用,您只能访问存储代码的JAR文件中的资源。

首先,海报已经尝试了getResource(“/images/a.png”),这与您建议的完全相同。其次,Class.getResource()没有ClassLoader.getResource(Class.getResource通常委托给ClassLoader.getResource)之外的“相同JAR”限制。但是,如果安装了安全管理器,则跨JAR访问可能存在权限问题,这是正确的。尝试加载映像的类位于项目的src文件夹中的包中。有什么方法可以验证你上面的建议吗?听起来你在使用Maven或其他东西来构建jar。跟踪您正在构建的jar(它可能位于target/目录中),并使用“jar-tvf-target/thefileyourebuildin.jar”。这将打印出一个列表,其中应包括您尝试运行的类和“images/a.png”。如果它没有(我猜它不会),你必须与mvn或你正在使用的任何东西搏斗,直到它成功。