2009-08-26 86 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文件中。這樣,當用戶提取它時,一切都在你期望的地方。