2009-08-26 87 views
2

我有我建立的一个使用非Java可执行文件,它通过的ProcessBuilder调用应用:运行可执行在罐子的ProcessBuilder

ProcessBuilder pb = new ProcessBuilder(invocation);
pb.redirectErrorStream(true);
Process proc = pb.start();
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);

不过,我想那捆绑应用整齐地放入jar文件本身,而不是要求放置在同一个目录之外。有没有办法运行这个应用程序而不提取它?

如果我需要删除ProcessBuilder,那没关系,只要它有效。 :)

回答

5

你基本上会要求操作系统在ZIP文件中运行一个应用程序。我不知道有什么办法可以不先解压。即使它是Java应用程序,您也需要调用可执行文件,因为它知道如何解析JAR文件并访问其中的类和资源。

我能想到的唯一相当简单的解决方法是将JAR的内容提取到临时文件夹并从那里运行程序。这可以通过使用java.util.zip中的类以编程方式完成。

+0

我想的很多。我可能会检查文件夹是否存在,如果不存在,它会从jar中提取它,然后执行它。谢谢! – Ken 2009-08-26 19:47:58

1

您可以将可执行文件和JAR捆绑到另一个zip文件中。这样,当用户提取它时,一切都在你期望的地方。