如何使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()
方法,您可以使用它在播放器更改音量时停止播放声音