2016-01-23 85 views
-1

我已經做了一個自定義窗口與兩個JButtons,當點擊將開始分別停止.wav播放。我遇到的麻煩是我可以開始聲音,但除非關閉程序,否則我無法阻止它。Audioplayer開始/停止與動作事件

多次單擊開始按鈕將使相同的文件在「canon」中播放。我懷疑這與每個按鈕創建自己的文件「實例」有關,它們在不同的{}內,但我找不到解決此問題的任何方法。我願意改變/和或刪除我目前使用的方法,以支持更好的工作。

下面是代碼:

package jojo; 

import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStream; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 

import sun.audio.AudioPlayer; 
import sun.audio.AudioStream; 


public class Ljudknappar extends JFrame implements ActionListener{ 

    private static final long serialVersionUID = -389308630436200228L; 

    private JButton knapp; 
    private JButton knapp2; 




    public Ljudknappar() 
    { 
     super("Ett fönster"); 
     super.setDefaultCloseOperation(EXIT_ON_CLOSE); 

     super.setLocation(50,50); 


     super.setPreferredSize(new Dimension(400,400)); 
     super.setLayout(new FlowLayout(FlowLayout.CENTER)); 
     knapp = new JButton("Starta"); 
     knapp.addActionListener(this); 
     knapp.setPreferredSize(new Dimension(90,30)); 
     add(knapp); 

     knapp2 = new JButton("Stopp"); 
     knapp2.addActionListener(this); 
     knapp2.setPreferredSize(new Dimension(90,30)); 
     add(knapp2); 

     pack(); 

     super.setVisible(true); 
    } 

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

    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 


     InputStream in; 
     try 
     { 
     in = new FileInputStream(new File("my .wav file of choice")); 

     AudioStream Ljud = new AudioStream(in); 

     Object src = e.getSource(); 

      if (src == knapp) 
      { 
       AudioPlayer.player.start(Ljud); 
      } 

      if (src == knapp2) 
      { 
       AudioPlayer.player.stop(Ljud); 
      } 
     } 

     catch(Exception error) 
     { 
      JOptionPane.showMessageDialog(null,"Something went wrong :("); 
     } 

    } 

} 

另外,如果你知道的方式來解決這個並有暫停第三個按鈕,那會是相當好。

我希望能夠使用而不必下載JLayer或類似軟件來啓動/停止音頻。只有基本的進口。

我很感激任何幫助。

回答

1

爲什麼不乾脆不斷在actionPerformed一個新的語音串流,只有一個創建當一個已經不存在,玩得,使Ljud非靜態字段來了嗎?這樣停止按鈕可以停止它。