0

すべてのクラス ファイルとリソースを jar としてパックしましたが、実行時にサウンド ファイルが再生されません。私のパッケージ構造は次のとおりです。

+project
|_classes
|_ _*.class
|_resources
|_ _ *.jpg,*.wav

コード:

AudioInputStream inputStream = AudioSystem.getAudioInputStream(kidsClassRoom.class.getResourceAsStream("../resources/"+file));

この行が実行されたときに取得しnullます!!

4

5 に答える 5

2

すでに提示されている理論の代替理論。多くの場合、getResource() 呼び出しの成功は、それらを見つけるために呼び出されるクラス ローダー インスタンスに依存します。このため、getResource() を呼び出すユーザー定義オブジェクトのインスタンスを使用することをお勧めします。例えば

// Sanity check
System.out.println("The value of 'file' is: " + file);
// Presuming kidsClassRoom1 is an instance of kidsClassRoom
AudioInputStream inputStream = AudioSystem.
    getAudioInputStream(
        kidsClassRoom1.
            getClass().
            getResourceAsStream("/resources/"+file));

また、スニペットがリソースに "/" のプレフィックスを使用していることにも注意してください。他の人が言っていることとは反対に、リソース パスの「ルートから」を意味すると確信しています。「/」または「../」を省略すると、クラス ローダーは、これが発生しているクラスのサブパスでリソースを検索します。

もちろん、Wav が Jar に収まるようにしてください。.jar を .zip にコピー/名前変更し、それをダブルクリックすることは、Windows でアーカイブの内容を調べる「手っ取り早い」方法です。

于 2011-02-07T17:22:25.607 に答える
1

resources以下に示すよう な名前のパッケージを作成しますここに画像の説明を入力してください

それから

 AudioSystem.getAudioInputStream(kidsClassRoom.class.getResourceAsStream("resources/"+file));
于 2011-02-07T16:50:55.550 に答える
1

これは、jar 内のループ サウンド ファイルを再生するための私の関数です。私にとっては問題なく動作します。

getResourceAsStream()jar では動作しないようです。ただし、getResource()そうです。

public synchronized void alarm() {
    try {
        crit = AudioSystem.getClip();
        AudioInputStream inputStream1 = AudioSystem.getAudioInputStream(this.getClass().getResource("critical.wav"));
        crit.open(inputStream1);
        crit.loop(Clip.LOOP_CONTINUOUSLY);

    } catch (Exception e) {
        System.err.println(e.getMessage());
        }
}
于 2013-03-09T14:00:27.797 に答える
0

を実行するgetResourceAsStreamと、現在のクラスではなく、アーカイブのルートに相対的です。つまり、最初にを削除してみてください../

于 2011-02-07T16:48:17.887 に答える