2012-04-15 11 views
2

私は自分のjarファイルからイメージをロードしようとしています。しかし、getResource()にどの文字列を指定しても、常にnullが返されます。 net.sharpcodeでnet.sharpcode.crawler.ui.CrawlerFrame.initでスレッド "AWT-EventQueueの-0" java.lang.NullPointerExceptionが (CrawlerFrame.java:35) で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()); 

例外。 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

+0

jarファイルの構造を表示する必要があります。 –

+0

@JonSkeetは構造の画像を追加しました。 – Reinard

答えて

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

+0

@SirTroll:Bootstrapperがnet.sharpcode.crawlerにある場合... –

0

を使用し、私はBootstrapperクラスがnet.sharpcode.crawlerパッケージ内にある参照してください。つまり、次のパス./img/logo.png/net/sharpcode/crawler/img/logo.pngに解決されます。私は/imgは、トップレベルのディレクトリであると思いますので、絶対パスのいずれかを使用:ClassLoader経由

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

や負荷:

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

イメージディレクトリはnet.sharpcode.crawlerにあります。 img – Reinard

関連する問題