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方法。