我知道这可能是重复的。我以前检查过其他问题,但没有成功解决我的问题。我正在尝试使用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();