2

我正在尝试从我的 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.init(CrawlerFrame.java:35) 在 net.sharpcode.crawler.ui.CrawlerFrame.(CrawlerFrame.java: 28) 在 net.sharpcode.crawler.Bootstrapper$1.run(Bootstrapper.java:55)

在此处输入图像描述

我试过了:

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

3 回答 3

5
this.getClass().getResource("/net/sharpcode/crawler/img/logo.png")
于 2012-04-15T14:55:30.003 回答
2

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

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

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

Bootstrapper.class.getResource("/img/logo.png");
于 2012-04-15T14:46:10.063 回答
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")
于 2012-04-15T14:46:41.017 回答