1
私は、オーディオクリップを再生するには、次の方法があります:私は(レノボ)は、Windows 7のデスクトッププラットフォーム上でこれを実行すると、予想通りのJava audiostreamのプラットフォームに依存しない
public static synchronized void playSound(final String path) {
new Thread(new Runnable() {
// The wrapper thread is unnecessary, unless it blocks on the
// Clip finishing; see comments.
public void run() {
try {
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(
this.getClass().getClassLoader().getResourceAsStream(path));
clip.open(inputStream);
clip.loop(Clip.LOOP_CONTINUOUSLY);
while (runThread) {
Thread.sleep(5000);
}
clip.stop();
}
catch (Exception e) {
System.err.println("Audio clip error: "+e.getMessage());
e.printStackTrace();
}
}
}).start();
}
は、それが動作します。ただし、Windows 7ラップトップ(Acer)で実行すると、次の例外が発生します。
java.lang.NullPointerException
at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source)
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at StokerMonitor.Alerts$1.run(Alerts.java:62)
at java.lang.Thread.run(Unknown Source)
Line 62は 'AudioInputStream'ステートメントです。 2つのプラットフォームの違いは分かりませんが、ラップトップにはWindows 7の依存関係がないと思っています。誰にも何か提案はありますか? TIA。
'this.getClass()。getClassLoader()。getResourceAsStream(path)'がnullを返しています。 .jarに実際にそのパスに一致するエントリが含まれていることを確認します。 getResourceAsStream *は引数としてファイル名をとらない*すべてのプラットフォームでディレクトリ区切り文字として前方スラッシュ( '/')を使用しなければならない相対URL(スキームまたは権限なし)を取ります。 – VGR
両方のプラットフォームで同じjarファイルです。変数 'path'は誤った名前です。 .wavファイル名です。 –
'path'の値は何ですか? – VGR