Javafx MediaPlayer.play()突然结束

Javafx MediaPlayer.play()突然结束,javafx,javafx-2,javafx-8,Javafx,Javafx 2,Javafx 8,这是我的密码: public void run() { String filePath = queue.poll(); // Nothing more to play if (filePath == null) { isPlaying = false; return; } isPlaying = true; File file = new

这是我的密码:

    public void run() {

        String filePath = queue.poll();

        // Nothing more to play
        if (filePath == null) {
            isPlaying = false;
            return;
        }

        isPlaying = true;
        File file = new File(filePath);
        String uriString = file.toURI().toString();
        player = new MediaPlayer(new Media(uriString));
        player.play(); 
        player.setOnEndOfMedia(this);
    }
如您所见,run()被反复调用。每次调用时,它都从队列中获取head元素并播放它

有时它能工作,有时游戏突然结束,onEndOfMedia从不开火

这个片段没有显示出来,但我确实尝试过覆盖onError、捕捉异常等。有时候,这出戏还是会突然结束

也许我应该从一个特定的线程触发它

编辑:现在说确定还为时过早,但将player设置为字段变量可能已经解决了这个问题。我的播放器在玩的时候被垃圾收集了吗


这是正确的做事方式吗?它会导致内存泄漏吗?

可能是您遇到了错误。只需通过调用player.setOnError(/*error handler runnable*/)在MediaPlayer实例上设置一个错误处理程序。看看它是否能正常工作。您也可以在媒体实例上设置另一个错误处理程序。请尝试在
player=new MediaPlayer(…)之前调用
if(player!=null){player.dispose();}
,以确保已释放任何现有播放机
@Amin,正如我的问题中所述,我确实尝试过SetOneError。谢谢@James_D 1,非常好的建议@是的,你是对的。无法从您的问题中理解您在两个不同的对象上尝试了两种setOnError方法。可能您遇到了错误。只需通过调用player.setOnError(/*error handler runnable*/)在MediaPlayer实例上设置一个错误处理程序。看看它是否能正常工作。您也可以在媒体实例上设置另一个错误处理程序。请尝试在
player=new MediaPlayer(…)之前调用
if(player!=null){player.dispose();}
,以确保已释放任何现有播放机
@Amin,正如我的问题中所述,我确实尝试过SetOneError。谢谢@James_D 1,非常好的建议@是的,你是对的。无法从您的问题中理解您在两个不同的对象上尝试了两种setOnError方法。