3

classボタンをクリックしたときに音を鳴らすためのを作成しました。

コードは次のとおりです。

public void playSound()
    {
        try 
        {
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("beep-1.wav"));
            Clip clip = AudioSystem.getClip( );
            clip.open(audioInputStream);
            clip.start( );
        }
        catch(Exception e)
        {
            System.out.println("Error with playing sound.");
        }
    }

メソッドに実装したいButtonListenerのですが、音が出ないようです。

ここにButtonListenerコード:

private class ButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e) 
        {
            if (replayButton == e.getSource()) 
            {
                playSound();
            }
        }
    }

コードの何が問題になっていますか?

編集 :

基本的には簡単な記憶ゲームを作ろうとしているので、ボタンをクリックすると音が鳴ります。

解決済み:

Soundjayからダウンロードしたオーディオファイルに問題が発生したため、オーディオファイルを再生できないようです。@ _ @

4

3 に答える 3

4

使用する

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        playSound();
    }
});
于 2012-05-13T09:19:10.530 に答える
3

これは機能するはずです:

public class Test extends JFrame {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        JButton button = new JButton("play");
        button.addActionListener(new  ActionListener() {
        public void actionPerformed(ActionEvent e) {
                playSound();
        }});
        this.getContentPane().add(button);
        this.setVisible(true);
    }

    public void playSound() {
        try {
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("beep.wav"));
            Clip clip = AudioSystem.getClip( );
            clip.open(audioInputStream);
            clip.start( );
        }
        catch(Exception e)  {
            e.printStackTrace( );
        }
    }
}

ファイルの再生中は、GUIが責任を負わないことに注意してください。これを修正するには、リスナーでJoopEggenのアプローチを使用してください。ファイルを非同期で再生します。

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        playSound();
    }
});
于 2012-05-13T09:22:56.550 に答える
2

スタックトレースをお願いします??? ボタンにリスナーを追加しましたか?

とにかく、クロスプラットフォームをターゲットにする場合、標準的な方法にはいくつかのバグがあります。http://www.oracle.com/technetwork/java/javase/tech/index-jsp-140239.htmlでJavaMediaFrameworkを使用します。

于 2012-05-13T09:12:28.350 に答える