2011-01-13 13 views
1

私は現在、jarファイルとして友人に送る必要があるプログラムを書いています。プログラムには、プログラムが正常に動作するためにロードする必要がある画像があり、そのすべてを1つのjarファイルに格納します。現在のところ、実行可能なjarやコマンドラインで実行すると動作しません。しかし、それはnetbeansで動作します。私のjarファイルは画像をロードしません

ここで私が使用しているコードです:

を私が使用している画像をロードするには:私もちょうど

getClass().getResource(path) 

ラインを試してみたURLのために

protected ImageIcon createImageIcon(String path, String description) 
{ 
java.net.URL imgURL = getClass().getClassLoader().getResource(path); 
if (imgURL != null) 
{ 
    return new ImageIcon(Toolkit.getDefaultToolkit() 
        .getImage(imgURL),description); 
} 
else 
{ 
    System.err.println("Couldn't find file: " + path); 
    return null; 
} 
} 

は、画像が作成されるはずである:

this.img =createImageIcon(File.separator+"."+File.separator 
      +"resources"+File.separator+"tiles"+File.separator+"tile.png","tile"); 

私のjarファイルは、クラスファイルとリソースフォルダの両方を最上位に含むフォルダでセットアップされています。

私はこれを解決する方法を模索しましたが、動作するものは何も見つかりません。

ありがとうございました。

+0

あなたはイメージが作成されようとしている場所のファイル名を渡していますか?これが当てはまる場合、ファイルが/./resources/tiles/tile.pngに保存されていることを意味します。これはファイルシステムのルートレベルにある "/resources/tiles/tile.png"に相当します。このケースでは、クラスパスによってクラスパスが見つかると、それは見つからないでしょう。 –

+0

File.separatorの代わりに/を使用し、 "/./resources/titles/tile"の代わりに "/resources/titles/tile.png"を使用する方法システムに応じて不正なパスになる可能性があります。 – dvhh

答えて

2

あなたのURLは意味を成さない"/./resources/tiles/tile.png"と評価されます(しかし、多分あなたは、NetBeansから実行するときに使用されるClassLoaderがエラーを許容します。)
は初期"/./"をドロップしてください。文字列は相対URLとして扱われ、スラッシュは常に有効なので、File.separatorへの参照は必要ありません。

0

他の何ものにもかかわらず、コードにはフェイル・スローという不名誉な特性があります。

の書式設定のため申し訳ありません
URL x = get class.getclassloader.getresource(...) 
If x == null 
    Throw new defect "expected ... But it wasn't there" 

のようなものを試してみてください、しかし、iPadは、それはあまりにもハード右のそれを行うにはなります。

1

/./resources/back_img.pngの代わりに、resources/back_img.pngにはClassLoaderを使用してください。ここ
は一例です:あなたの「createImageIcon」機能で

String path = "resources/back_img.png"; 
    ClassLoader cl = ImageHandler.class.getClassLoader(); 
    URL imgURL = cl.getResource(path); 
    //URL imgURL = ImageHandler.class.getResource(path); 

    if (imgURL != null) { 
     ImageIcon icon = new ImageIcon(imgURL, description); 
     Image img = icon.getImage(); 
     Image sizedImg = img.getScaledInstance(width, height, Image.SCALE_DEFAULT); 
     return new ImageIcon(sizedImg); 
    } else { 
     System.err.println("Couldn't find file: " + path); 
     return null; 
    } 
関連する問題