2012-05-13 6 views
3

ボタンをクリックしたときにサウンドを再生するためにclassを作成しました。ボタンのためにJavaが再生されないサウンド

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(); 
      } 
     } 
    } 

コードで何が悪いのでしょうか?

EDIT:

基本的に私は、単純な記憶ゲームを作成しようとしている、と私はクリックしたときにボタンにサウンドを追加したいです。

は解決:

は、私は問題を抱えて、それゆえ、オーディオファイルが再生できないSoundjayからダウンロードした音声ファイルのように思えます。 @ _ @

答えて

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は責任がないだろうということ。この問題を解決するには、リスナーでJoop Eggenのアプローチを使用します。ファイルを非同期で再生します。私はここで何もいけない

SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     playSound(); 
    } 
}); 
+0

... :( –

+0

は上のスピーカーです;) –

+0

はい...私はすでにこのことについて質問をしたが、私はどんな答えを得るアレント:?/ –

2

任意のstacktrace、してください???リスナーをボタンに追加しましたか?

とにかく、クロスプラットフォームをターゲットとする場合は、スタンドアウェイでいくつかのバグがあります。 Java Media Frameworkをhttp://www.oracle.com/technetwork/java/javase/tech/index-jsp-140239.htmlで使用してください。

4

使用

SwingUtilities.invokeLater(new Runnable() { 
    @Override 
    public void run() { 
     playSound(); 
    } 
}); 
関連する問題