带有 actionEvent 的音频播放器 start/stop
Audioplayer start/stop with actionEvent
我已经用两个 JButtons 做了一个自定义 window,当点击它们时将开始分别停止 .wav 播放。我遇到的麻烦是我可以启动声音,但除非我关闭程序,否则我无法停止它。
多次单击开始按钮将在 "canon" 中播放同一个文件。我怀疑这与每个按钮创建自己的 "instances" 文件有关,它们位于不同的 {} 中,但我找不到任何方法来解决这个问题。我愿意改变/和/或删除我目前使用的方法,以支持更好的方法。
代码如下:
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 :(");
}
}
}
此外,如果您知道解决此问题的方法并且有第三个暂停按钮,那也很好。
我希望能够 start/stop 使用音频而无需下载 JLayer 或类似软件。只有基本进口。
非常感谢您的帮助。
为什么不干脆 不 在 actionPerformed 中继续创建一个新的 AudioStream,只在一个不存在且正在播放时创建一个,并使 Ljud
non-static 字段中的 class?这样停止按钮可以停止它。
我已经用两个 JButtons 做了一个自定义 window,当点击它们时将开始分别停止 .wav 播放。我遇到的麻烦是我可以启动声音,但除非我关闭程序,否则我无法停止它。
多次单击开始按钮将在 "canon" 中播放同一个文件。我怀疑这与每个按钮创建自己的 "instances" 文件有关,它们位于不同的 {} 中,但我找不到任何方法来解决这个问题。我愿意改变/和/或删除我目前使用的方法,以支持更好的方法。
代码如下:
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 :(");
}
}
}
此外,如果您知道解决此问题的方法并且有第三个暂停按钮,那也很好。
我希望能够 start/stop 使用音频而无需下载 JLayer 或类似软件。只有基本进口。
非常感谢您的帮助。
为什么不干脆 不 在 actionPerformed 中继续创建一个新的 AudioStream,只在一个不存在且正在播放时创建一个,并使 Ljud
non-static 字段中的 class?这样停止按钮可以停止它。