java - 我无法停止音乐
问题描述
我在使用以下代码时遇到问题;我创建了 2 个类:
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
的实例,而不是您实例化的实例。
我建议采取以下措施。
Banger
(1)在播放和停止它的类中创建一个实例变量。(2) 在 Banger 中,将构造函数与启动和停止Clip
.
其他一些建议:
- 我看不出你是如何做任何需要
DataLine
的,我会implements DataLine
从你的Banger
班级中删除。 - 的
loop
方法Clip
将开始播放,因此您不需要该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();
推荐阅读
- mysql - 如何处理 4 GB 数据集?MySQL?
- android-studio - android studio中发布模式的SHA1密钥认证
- python - if-elif-else 和/或字符串比较问题的 Python 问题
- python - 如何使用新加坡时间戳让 Balance 在 bitBTC 交易 API 上工作得到未经授权的错误
- python - 绘制不同频率的数据叠加图
- php - 无法在 Form POST Laravel 应用程序上保存数据?
- reactjs - Amazon Cloudfront 在从 www 重定向到裸域时附加 index.html
- google-cloud-platform - 如何使用 GCP 平台流式传输事件?
- java - 具有通用节点类型的双向链表
- python - 减法中遇到无效值 - Softmax,Python