2

我有一个我构建的应用程序,它使用它通过 ProcessBuilder 调用的非 Java 可执行文件:

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,那很好,只要它有效。:)

4

2 回答 2

5

您实际上是在要求操作系统在 ZIP 文件中运行应用程序。如果不先提取它,我不知道有任何方法可以做到这一点。即使它是 Java 应用程序,您也需要调用java可执行文件,因为它知道如何解析 JAR 文件并访问其中的类和资源。

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

于 2009-08-26T16:58:37.240 回答
1

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

于 2009-08-26T17:03:52.067 回答