Jar将图像作为资源

时间:2012-04-15 14:43:32

标签: java jar resources embedded-resource

我正试图从我的罐子里加载一个图像。但无论我为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());
  

线程“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()

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

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

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

...如果它是相对Bootstrapper.class。如果img“目录”位于jar文件的根目录中,请使用

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

答案 2 :(得分: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")