Jar将图像作为资源

我正试图从我的jar子里加载一个图像。 但无论我为getResource()提供什么字符串,它总是返回null。

try { System.out.println(Bootstrapper.class.getResource("./img/logo.png").toURI().getPath()); } catch (URISyntaxException ex) { Logger.getLogger(CrawlerFrame.class.getName()).log(Level.SEVERE, null, ex); } ImageIcon ii = new ImageIcon(Bootstrapper.class.getResource("./img/logo.png")); setIconImage(ii.getImage()); 

net.sharpcode.crawler.ui.CrawlerFrame中net.sharpcode.crawler.ui.CrawlerFrame.init(CrawlerFrame.java:35)中的线程“AWT-EventQueue-0”java.lang.NullPointerException中的exception。(CrawlerFrame.java: 28)at net.sharpcode.crawler.Bootstrapper $ 1.run(Bootstrapper.java:55)

在此处输入图像描述

我试过了:

 getResource("") getResource(".") getResource("./") getResource("/img/logo.png") Bootstrapper.class.getProtectionDomain().getCodeSource().getLocation().getPath() 

 this.getClass().getResource("/net/sharpcode/crawler/img/logo.png") 

摆脱“./”部分 – 只需使用:

 Bootstrapper.class.getResource("img/logo.png"); 

……如果它与Bootstrapper.class 。 如果img “目录”在jar文件的根目录中,请使用

 Bootstrapper.class.getResource("/img/logo.png"); 

从堆栈跟踪中我看到Bootstrapper类位于net.sharpcode.crawler包中。 这意味着以下路径./img/logo.png将被解析为/net/sharpcode/crawler/img/logo.png 。 我猜/img是一个顶级目录,所以要么使用绝对路径:

 Bootstrapper.class.getResource("/img/logo.png") 

或通过ClassLoader

 Bootstrapper.class.getClassLoader().getResource("img/logo.png")