0

発見したばかりのきちんとしたライブラリ(JLayer)を使用してmp3ファイルを再生しようとしていますが、次のコードで(Netbeansで)コンパイルすると正常に動作します。

ClassLoader cl = this.getClass().getClassLoader();
url = cl.getResource("music/45.mp3");
pin = new FileInputStream(url.getFile());
p = new Player(pin);
p.play();

プロジェクトをビルドし、実行可能jarを実行しようとしました。プログラムが実行されていることを視覚的に確認できるように、JFrameを拡張しました。実行するとフレームは表示されますが、音は出ません。クラスローダーを使用するとこの問題は解決しますが、運がありません。助けていただければ幸いです!

4

1 に答える 1

1

FileInputStreamjarファイルにある可能性のあるリソースがある場合は使用しないでください-useClassLoader.gerResourceAsStreamまたはClass.getResourceAsStream。それが彼らの目的です。ディスク上に別のファイルがないので、それを使用しようとしても意味がありませんFileInputStream

(もちろん、リソースを適切に利用可能にしていないことに気付くかもしれませんが、それは別の問題です。

したがって、次を使用してください。

Player p = new Player(getClass().getResourceAsStream("/music/45.mp3"));
p.play();

(コードからは、必要以上に早く変数を宣言しているように見えます。論理的にはローカル変数である必要がある場合は、フィールドとして宣言することもできます。注意する価値があります。必ず使用するようにしてください。クラスまたはインスタンスの状態を実際に示し、ローカル変数をできるだけ遅く宣言する場合は、フィールドを使用します。理想的には、初期化の時点です。)

于 2012-12-27T00:56:17.203 に答える