如何使MediaPlayer在包含它的对象在Java中设置为null后停止?
我为我的游戏创建了一个如何使MediaPlayer在包含它的对象在Java中设置为null后停止?,java,javasound,Java,Javasound,我为我的游戏创建了一个Sound类,其中包含一个MediaPlayer循环(在出现问题的场景中)。如果包含声音对象的对象被设置为null(将其删除),MediaPlayer将继续播放,直到到达媒体的末尾,尽管它应该停止,因为它应该被设置为null。或者这不是它的工作原理 我在网上找到了以下帖子,但没有一篇与我的问题相同: 这是声音类: public classs Sound { MediaPlayer mediaPlayer; public Sound(String path){
Sound
类,其中包含一个MediaPlayer循环(在出现问题的场景中)。如果包含声音对象的对象被设置为null(将其删除),MediaPlayer将继续播放,直到到达媒体的末尾,尽管它应该停止,因为它应该被设置为null。或者这不是它的工作原理
我在网上找到了以下帖子,但没有一篇与我的问题相同:
这是声音
类:
public classs Sound {
MediaPlayer mediaPlayer;
public Sound(String path){
Media media = new Media(getClass().getResource("/audio/" + path).toString());
mediaPlayer = new MediaPlayer(media);
}
public void loop(){
//only called once after initialized
mediaPlayer.setAutoPlay(true);
mediaPlayer.setCycleCount(MediaPlayer.INDEFINITE);
mediaPlayer.setOnEndOfMedia(new Runnable() {
@Override
public void run() {
mediaPlayer.seek(Duration.ZERO);
mediaPlayer.play();
}
});
mediaPlayer.play();
}
}
这是包含声音的类:
public class Level {
private Sound soundTrack = new Sound("level_music.wav");
public Level() {
soundTrack.loop();
}
这是包含声音的对象设置为空的方式:
public class Main{
private Level level = new Level();
//...
public Main(){
new Timer(15, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(playerLeavesTheLevel()){
level = null;
//...
}
}
}
}
这不起作用的唯一原因是,删除顶级对象后,mediaPlayer未设置为null。写入
level=null
意味着您要告诉一个名为level
的引用来保存值:null
。先前指向的level
值仍然存在(并且仍由MediaPlayer
使用)<代码>级别不再指向它。也许MediaPlayer
有一个stop()
方法,您可以使用它在播放器更改音量时停止播放声音