2012-04-15 123 views
2

我试图从我的jar中获取图像。但是无论我为getResource()提供的字符串是否总是返回null。Jar获取图像作为资源

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()); 

在异常线程 “AWT-EventQueue的-0” 显示java.lang.NullPointerException 在net.sharpcode.crawler.ui.CrawlerFrame.init(CrawlerFrame.java:35) 在net.sharpcode。 crawler.ui.CrawlerFrame(CrawlerFrame.java:28) 在net.sharpcode.crawler.Bootstrapper $ 1.run(Bootstrapper.java:55)

enter image description here

我已经试过:

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

什么是你'Bootstrapper'类的包叫什么名字? – dash1e 2012-04-15 14:46:03

+0

你需要向我们展示你的jar文件的结构。 – 2012-04-15 14:47:47

+0

@JonSkeet添加了一张结构图。 – Reinard 2012-04-15 14:53:34

回答

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

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

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

...就是如果它的相对Bootstrapper.class。如果img“目录”是在JAR文件的根目录,使用

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

它只是在使用“img/logo.png”时返回“null” – Reinard 2012-04-15 14:50:36

+0

@SirTroll:它不应该 - 如果引导程序在net.sharpcode.crawler中... – 2012-04-15 16:20:35

0

从堆栈跟踪我看到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") 
+0

图像目录位于net.sharpcode.crawler。 IMG – Reinard 2012-04-15 14:51:25