学校のプロジェクト用に AudioManager クラスを書き直していますが、問題が発生しました。私の教授は、try/catch を使用する代わりに、Try-with-resources ブロックを使用してすべてのリソースをロードするように私に言いました (以下のコードを参照)。javax.sound.sampled.Clip の Clip クラスを使用しています。Clip を close() しなければ、try/catch/ を使用する PlaySound(String path) メソッドですべてが完全に機能します。クリップを close() すると、もう使用できないことはわかっています。Clip と Try-with-resources の Oracle Docs を読みましたが、解決策が見つかりませんでした。だから私が知りたいのは:
Try-with-resource ブロックを使用して、クリップを閉じる前にクリップのサウンドを再生/聞くことはできますか?
// Uses Try- with resources. This does not work.
public static void playSound(String path) {
try {
URL url = AudioTestManager.class.getResource(path);
try (Clip clip = AudioSystem.getClip()){
AudioInputStream ais = AudioSystem.getAudioInputStream(url);
clip.open(ais);
clip.start();
}
} catch( LineUnavailableException | UnsupportedAudioFileException | IOException e) {
e.printStackTrace();}
}
// Does not use Try- with resources. This works.
public static void playSound2(String path) {
Clip clip = null;
try {
URL url = AudioTestManager.class.getResource(path);
clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream(url);
clip.open(ais);
clip.start();
}
catch( LineUnavailableException | UnsupportedAudioFileException | IOException e) {
e.printStackTrace();}
finally {
// if (clip != null) clip.close();
}
}
前もって感謝します!