我正试图从我的罐子里加载一个图像。但无论我为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)
我试过了:
getResource("")
getResource(".")
getResource("./")
getResource("/img/logo.png")
Bootstrapper.class.getProtectionDomain().getCodeSource().getLocation().getPath()
答案 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")