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")