1

私は現在、友人にjarファイルとして送信する必要のあるプログラムを作成しています。プログラムには、プログラムが正しく機能するためにロードする必要のある画像があり、すべてを1つのjarファイルに含める必要があります。現在、実行可能jarから、またはコマンドラインから実行すると機能しません。ただし、NetBeansでは機能します。

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

使用している画像を読み込むには:

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;
 }
}

私も試したURLの場合

 getClass().getResource(path)

イメージが作成されることになっている行は次のとおりです。

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

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

これを解決する方法を探しましたが、うまくいくものが見つかりません。

ありがとう。

4

3 に答える 3

2

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

于 2011-01-13T00:39:03.237 に答える
1

を使用する代わりに、 with を/./resources/back_img.png使用resources/back_img.pngClassLoaderます。
ここに例があります:

    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;
    }
于 2011-10-06T06:10:22.200 に答える
0

他の何があっても、コードにはフェイルスローであるという望ましくない特性があります。

次のようなものを試してください

URL x = get class.getclassloader.getresource(...)
If x == null
   Throw new defect "expected ... But it wasn't there"

書式設定は申し訳ありませんが、iPad では正しく行うのが難しすぎます。

于 2011-01-13T00:41:46.223 に答える