0

わかりましたので、このコードがあり、Eclipse で再生している間は機能しています。しかし、それをエクスポートすると、サウンドがまったく再生されません..どのようにエクスポートすればよいですか、またはそれを機能させるにはどうすればよいですか?

package sound;
import java.io.InputStream;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
public class GameSounds 
{
    public static synchronized void hit()
    {
        try
        {
            String resPath = "/sounds/8bit_bomb_explosion.wav"; // *** this is the key ***
            InputStream audioInStream = GameSounds.class.getResourceAsStream(resPath);
            System.out.println("is audioInStream null?: " + (audioInStream == null)); // test it!
            AudioInputStream inputStream = AudioSystem.getAudioInputStream(audioInStream);          Clip clip = AudioSystem.getClip();
            clip.open(inputStream);
            clip.start(); 
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

エラーはありません..問題はエクスポートだと思います..エクスポートを押してから、実行可能なjarファイルを選択します.すべてが機能しますが、オーディオは機能しません..

そして例外はスローされません

出力をログに記録するということは、「audioInStream は null ですか?」ということです。はいの場合、出力は false であり、スローされる例外はありません

4

2 に答える 2

0

パスが間違っているか、入力ストリームが正しく機能していない可能性があります。プロジェクトを何回エクスポートしたかわかりませんが、リソースが正しく読み込まれません。コマンドプロンプトまたはターミナルでjarを実行することをお勧めします。どちらの方法でも、コマンドは同じだと思います。

cmd/terminal から実行することをお勧めする理由は、発生する可能性のあるエラーが cmd/terminal に表示され、問題をもう少し分解し始めることができるためです。

-java jar PathAndNameOfJar.jar

ビデオはこちら

于 2014-07-20T22:44:24.243 に答える
0

問題はおそらく、InputStream を使用していることと、マーク可能性と再設定可能性についてテストされる可能性があることです。通常、オーディオ ファイルはどちらもサポートしていないため、何らかの例外が発生します。

解決策は、代わりに URL を使用することです。その後、中間の InputStream ステップを経由せずに AudioInputStream に到達できます。

したがって、文字列を構築する代わりに、URL を構築し、これを入力パラメーターとして getResourceAsStream() メソッドに渡します。このメソッドの仕様を見ると、File、URL、InputStream の 3 つのオーバーロードが見られます。URL は JAR ファイルにパックされたリソースを指定でき、マーク/リセット エラーについてテストされていないため、URL が最適に機能することがわかりました。

于 2013-07-15T01:22:13.493 に答える