有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javajavax:尝试找到在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()

但是删除不起作用。它似乎总是在玩家中使用

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

谢谢


共 (1) 个答案

  1. # 1 楼答案

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

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

    编辑: 所以,我已经验证了MediaLocator不能处理jar:file:/url。 在我看来,你有两个选择:

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

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