JavaFX MediaPlayer不会释放文件句柄

时间:2016-10-05 20:59:01

标签: java javafx media-player

我知道这可能是重复的。我以前检查过其他问题,但没有成功解决我的问题。我正在尝试使用javafx构建某种即时按钮应用程序。在某些时候,我使用以下代码播放文件:

if(mediaPlayer != null){
    mediaPlayer.stop();
}
File soundFile = new File(Config.getInstantSoundsDirectory() + File.separator + fileName);
Media mediaFile = new Media(soundFile.toURI().toString());
mediaPlayer = new MediaPlayer(mediaFile);        
mediaPlayer.setOnEndOfMedia(() -> mediaPlayer.dispose());
mediaPlayer.play();

如果我想删除我正在使用以下代码的文件:

try {
    Files.deleteIfExists(Paths.get(Config.getInstantSoundsDirectory(), fileName));
} catch (IOException e1) {      
    e1.printStackTrace();
} 

如果我之前从未播放过这个文件,那么它是有效的。如果我这样做,我会得到一个异常,说我无法删除它,因为其他一些进程正在使用它。根据其他帖子,从文件中删除文件句柄的解决方案是在我的mediaPlayer上调用dispose(),就像我在播放文件时做的那样。不幸的是,错误仍然存​​在。我可能错过了什么吗?

感谢您的帮助。

Greets Ionic

编辑 - >这是我的示例测试代码:

String filePath = Paths.get(".", "test.mp3").toString();
File soundFile = new File(filePath);
Media hit = new Media(soundFile.toURI().toString());
player = new MediaPlayer(hit);
player.setOnEndOfMedia(() -> {
    player.dispose();
    try {
        Files.deleteIfExists(Paths.get(".", "test.mp3"));
    } catch (IOException e) {       
        e.printStackTrace();
    }
});
player.play();

0 个答案:

没有答案