2016-01-23 105 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非静态字段来了吗?这样停止按钮可以停止它。