Javax :尝试找到在jar中打开AVI的解决方案



我试图在可执行jar文件中打开一个AVI,我找到的唯一解决方案是使用FileOutputStream并在临时文件中制作副本:

InputStream inputStream = getClass().getResourceAsStream(filePathInJar);
int read = 0;
byte[] bytes = new byte[1024];
this.file = new File("c:\tmpfile.avi");
OutputStream out = new FileOutputStream(file);
while ((read = inputStream.read(bytes)) != -1) {
    out.write(bytes, 0, read);
}
inputStream.close();
out.flush();
out.close();

然后我可以制作:

mediaPlayer = Manager.createRealizedPlayer(new File("c:\tmpfile.avi").toURI().toURL());

第一个问题:你有更好的解决方案吗?

因此,使用此解决方案,我将在使用寿命结束时删除临时文件,并尝试:

mediaPlayer.stop();
mediaPlayer.close();
mediaPlayer.deallocate();
file.delete()

但是删除不起作用。它似乎总是在播放器中使用...

第二个问题:如何停止使用临时文件或强制删除?

谢谢。

我没有尝试过这个,但您可以尝试使用 getClass().getResource(filePathInJar) 获取资源的 URL,然后使用它来构造一个MediaLocator以用作createRealizedPlayer()参数。像这样:

URL url = getClass().getResource(filePathInJar);
MediaLocator locator = new MediaLocator(url);
mediaPlayer = Manager.createRealizedPlayer(locator);

编辑:所以,我已经验证了媒体定位器无法处理jar:file:/网址。在我看来,您有两种选择:

  1. 查找或创建自定义基于输入流的数据源。http://www.extollit.com/isdsjmf.php 的页面声称有一个有效的页面。我没试过。

  2. 继续做你现在正在做的事情 - 将媒体文件从 jar 复制到临时文件,并使用 file://url。我认为您可以使用File.createTempFile()和File.deleteOnExit()来解决删除文件的问题

相关内容

  • 没有找到相关文章

最新更新