0

私は自分のプログラムであるときに開始され、ループし続けるバックグラウンド ミュージックを実装しようとしています。netbeans からプログラムを実行すると完全に機能しますが、jar ファイルを実行すると機能しませんでした。現在の実装で動作させる方法はありますか? ありがとう

メインメソッドでは、これを呼び出します:

Sound sound = new Sound(); 
if (sound.setSong("resources\\music.wav")) { sound.start(); }

サウンドクラスは次のとおりです。

public class Sound extends Thread {

private AudioStream as; 
private AudioPlayer p; 
private boolean playback;

public void run() { startPlayback(); }

public boolean setSong(String b) {
    try { 
        File a = new File(System.getProperty("user. dir") + "\\src\\" + b);
        if (a.exists()) { 
        // HERE THERE IS THE IMPLEMENTATION WHEN RUN FROM NETBEANS
            as = new AudioStream(new FileInputStream(a));
            return true; 
            } else { // HERE SHOULD BE THE JAR FILE IMPLEMENTATION
            as = new AudioStream(this.getClass().ge tResourceAsStream(b));
            return true;
            }
     } catch (Exception ex) { 
        JOptionPane.showMessageDialog(null, "Error in loading\n" + ex.getMessage());
        } 
        return false; }

public void startPlayback() { 
    playback = true; 
    p.player.start(as); 
    try { 
        do { } while (as.available() > 0 && playback);
        if (playback) { startPlayback(); } 
    } catch (IOException ex) {
         Logger.getLogger(Sound.class.g etName()).log(Level.SEVERE, null, ex);
    }    
}

public void stopPlayback() { playback = false; p.player.stop(as); } }
4

2 に答える 2

0

どちらの場合(netbeansとjar)でも、電話をかけることができるはずです

as = new AudioStream(this.getClass().getResourceAsStream("/resources/" + b));
于 2012-12-04T18:52:17.923 に答える
0

アプリが jar としてパッケージ化されている場合、サウンド ファイルはおそらく "resources" フォルダーではなく、クラスパスのルートにある可能性があります。したがって、おそらくそうする必要がありますsound.setSong("music.wav")

最初にファイル システムからファイルを読み込もうとする場合を除き、おそらくそうする必要はありません。NetBeans はそれをクラスパスに追加する必要があります。

また、Java 文字列のバックスラッシュはエスケープ シーケンスであり、パスの区切り文字ではないことに注意してください。したがって、パスを指定する場合は、「\a\b 」ではなく「/a/b」です。

于 2012-12-04T18:31:44.527 に答える