0

私はオーディオプレーヤーを作成しました.jarはnetbeansで作成されました。私が使用した画像をロードするには:

    ClassLoader cl = this.getClass().getClassLoader();
    URL playerIconURL = cl.getResource("tp/audioplayer/Images/icon.png");
    if (playerIconURL != null){

        ImageIcon playerIcon = new ImageIcon(playerIconURL);
        frame.setIconImage(playerIcon.getImage());
    }
    else{

        System.err.println("cannot load player icon");
    }

フォルダー Images は src/tp/audioplayer にあることに言及します。

netbeans 内でアプリケーションを実行しているときはすべて問題ありませんが、コマンド プロンプトで jar を実行すると、アプリケーションは起動しますが、空白でブロックされ、次のようになります。

ここに画像の説明を入力

私が何を間違えたのか、または何が問題なのか教えていただけますか? 前もって感謝します!

4

2 に答える 2

1

tp がクラスパスにあるcl.getResource("/tp/audioplayer/Images/icon.png")場合、tp がソース フォルダーでない場合 (ただし、ビルドパスに追加されている場合) でロードする必要があります。

ソースフォルダーとして tp を追加すると、 cl.getResource("/audioplayer/Images/icon.png")

jar では大文字と小文字が区別されることに注意してください。大文字と小文字を区別するファイル パスを指定してください。

于 2013-05-03T01:43:13.647 に答える
0

次のいずれかを試してください。

// using getResourceAsStream
InputStream is = this.getClass().getResourceAsStream( "picture.gif" );
// or
InputStream is = MyClass.class.getResourceAsStream( "stuff.ser" );
// or
InputStream is = MyApp.class.getClassLoader().getResourceAsStream( "InWords.properties" );

jar ファイル内のリソースは、getResourceAsStream を呼び出すクラスと同じパッケージ名で修飾する必要があります。または、ドットが /s にマップされる / で始まる絶対名を使用することもできます。リード / がない場合は、相対名があり、パッケージの名前が先頭に追加されます。/ を使用する場合は、自分自身のパッケージの名前、または jar にファイルされているリソースの名前を含める必要があります。たとえば、/com/mindprod/mypackage/mystuff.ser または /com.mindprod.mypackage.mystuff.ser または単に mystuff.ser を指定できます。で Windows スタイルのファイル名を使用しないでください。これらはファイル名ではありませんが、クラス ファイルと共に jar 内または場合によってはディスク上またはサーバー上に独立して存在する Java リソースです。

理論的には、getResourceAsStream はローカル クラスパス、jar、およびクラス ファイルのロード元のディレクトリを検索します。

于 2013-05-03T01:29:27.070 に答える