使用actionEvent启动/停止Audioplayer

时间:2016-01-23 16:54:31

标签: java swing actionevent audio-player

我已经制作了一个带有两个JButton的自定义窗口,当点击它们时将分别停止播放.wav。我遇到的麻烦是我可以启动声音,但除非我关闭程序,否则我无法停止声音。

多次单击开始按钮将使相同的文件在" 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 个答案:

答案 0 :(得分:1)

为什么不简单地继续在actionPerformed中创建一个新的AudioStream,只在一个人不存在并且正在播放时创建一个,并使import re with open('./dat.txt') as fin: for line in fin: ma = re.match(r'^(\d+) \d.+Overall evaluation', line) if ma: print("record identifier %r" % ma.group(1)) continue ma = re.search(r': (\d+)$', line) if ma: print(ma.group(1)) continue print("unrecognized line: %s" % line) 成为非静态的你班上的哪个领域?这样停止按钮就可以停止它。