Java 我无法停止音乐
我有以下代码的问题;我创建了两个类:Java 我无法停止音乐,java,javasound,Java,Javasound,我有以下代码的问题;我创建了两个类: import javax.sound.sampled.DataLine; import javax.swing.JOptionPane; public class Banger implements DataLine { void playMusic(String musicLocation) { try { File musicPath = new File(musicLo
import javax.sound.sampled.DataLine;
import javax.swing.JOptionPane;
public class Banger implements DataLine {
void playMusic(String musicLocation) {
try {
File musicPath = new File(musicLocation);
if (musicPath.exists()) {
AudioInputStream audioInput = AudioSystem.getAudioInputStream(musicPath);
Clip clip = AudioSystem.getClip();
clip.stop();
clip.open(audioInput);
clip.start();
clip.loop(clip.LOOP_CONTINUOUSLY);
}
else {
System.out.println("ERROR");
}
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
在这节课上,我试图制作一个音乐播放器,它工作得非常完美
public void mouseEntered(MouseEvent e) {
message6.setVisible(true);
options.setBackground(Color.YELLOW);
String filepath = "p.wav";
Banger musicObject = new Banger();
musicObject.playMusic(filepath);
}
public void mouseExited(MouseEvent e) {
message6.setVisible(false);
options.setBackground(new Color(0, 0, 0, 0));
Banger musicObject = new Banger();
String filepath = "p.wav";
clip.stop();
}
在这个类中,我尝试让一个按钮做一些事情,它工作,然后我尝试在我按下按钮时播放音乐,在我关闭按钮时停止它-它启动但不会停止您正在关闭的对象
mouseExited
是一个新的、单独的Banger
实例,而不是您实例化的实例
我建议采取以下措施
(1) 在播放并停止Banger的类中为其创建一个实例变量。
(2) 在Banger中,将构造函数与启动和停止剪辑的各个方法分开
其他一些建议:
- 我看不出您是如何做任何需要
DataLine
的事情的,我会从您的Banger
类中删除implements DataLine
Clip
的loop
方法将开始播放,因此您不需要使用start
方法
快速重写Banger:
public class Banger {
private Clip clip;
public Banger(String musicLocation) {
try {
File musicPath = new File(musicLocation);
if (musicPath.exists()) {
AudioInputStream audioInput = AudioSystem.getAudioInputStream(musicPath);
clip = AudioSystem.getClip();
clip.open(audioInput);
else {
System.out.println("ERROR");
}
}
catch(Exception ex) {
ex.printStackTrace();
}
}
public void play() {
clip.setFramePosition(0);
clip.loop(clip.LOOP_CONTINUOUSLY);
}
public void stop() {
clip.stop();
}
}
现在,mouseEntered
和mouseExited
应该访问相同的实例变量
private Banger banger;
public void setBanger(String filepath) {
banger = new Banger(filepath);
}
public void mouseEntered(MouseEvent e) {
// some code omitted
banger.play();
}
// similar for mouseExited, calling banger.stop();