在可执行jar中加载资源时获取null

时间:2014-06-09 10:00:35

标签: java maven jar resources executable

我有一个基于桌面的maven项目,在很多地方,我正在从资源文件夹加载图像,如下所示:

JLabel Footer = new JLabel(new ImageIcon(this.getClass().getClassLoader().getResource("Images/gloBOT_logo.png")));

Images文件夹位于src/main/resources

此代码在eclipse IDE中运行得非常好,但是当我运行我的可执行jar时,我得到NullPointerException,因为它无法加载图像。

任何人都可以建议我如何在Eclipse IDE中从资源文件夹加载图像,它也应该由可执行jar工作?

3 个答案:

答案 0 :(得分:0)

您可以尝试在网址前添加/

ImageIcon(this.getClass().getClassLoader().getResource("/Images/gloBOT_logo.png")));

答案 1 :(得分:0)

显然,名称区分大小写,您可能希望在开头添加/。如果仍然无法正常工作,请确保该文件位于正确的位置(我认为它应该是project / build / classes / Images / *)

答案 2 :(得分:0)

你能做的就是使用这样的东西:

ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();

BufferedImage buffLogo = null;
try {
    buffLogo = ImageIO.read( currentClassLoader.getResourceAsStream( "src/main/resources/Images/gloBOT_logo.png" ) );
}catch ( IOException ex ) {
    //exception catching and handling goes here.
}

JLabel Footer = new JLabel( new ImageIcon( buffLogo ) );

使用Class和ClassLoader加载资源之间存在很大差异,我不太清楚如何解释它,但我希望这会有所帮助。