2014-12-04 94 views
1

我一直在閱讀有關幾個小時的對象時不工作:從另一個JAR運行罐出口

我今天準備這樣做(和成功做)是運行一個可運行從我的代碼jar,事情是,當我將代碼導出到可運行jar,然後停止工作。

,從我的作品的編譯器的方法是:

ProcessBuilder pb = new ProcessBuilder("java", "-jar", "JAR I'M LOADING"); 
pb.start 

這是我已經試過:

我已經創建了,我想運行的jar包,和我創建了一個靜態JarLoader類在那裏我做:

public class JarLoader { 

    static JarLoader jl = new JarLoader(); 

    public static ProcessBuilder loadJar(){ 
     return new ProcessBuilder("java", "-jar", jl.getClass().getResource("JAR I'M TRYING TO LOAD").toString()); 

} 

當然,我打開那是方法運行罐子:

ProcessBuilder pb = JarLoader.loadJar(); 
pb.start(); 

此技術與其他類型的資源(如圖像)一起工作良好,但不適用於jar。

我錯過了什麼嗎? (是的,我確實將包含Jar和JarLoader的文件夾添加到項目源中)

+0

你正在加載的jar在另一個jar裏面? – MadProgrammer 2014-12-04 02:28:24

+0

是的,我有這個大學項目,我需要從另一個項目加載一個項目,這兩個項目都是可運行的罐子 – user2279474 2014-12-04 02:30:02

+1

首先將jar文件解壓縮到磁盤。或者將第一個Jar作爲庫加入第二個,並直接加載它的類... – MadProgrammer 2014-12-04 02:30:54

回答

1

您當前使用的技術允許您獲取已打包在JAR文件中的資源。但是這些資源只在應用程序內部一致,而不是在外部。

當您使用java -jar ...執行JAR文件時,這是一個正在執行的外部應用程序,它不會理解如何從另一個JAR內部檢索JAR。您需要將其臨時寫入磁盤,然後運行臨時JAR文件。

您需要:

  1. 打開資源作爲流。
  2. 使用Files.createTempFile()在某處創建臨時JAR文件。使用Files.copy()從資源流複製到臨時文件。
  3. 使用File.deleteOnExit()確保在主(主機)應用程序終止時臨時文件將被清除。
  4. 執行臨時文件java -jar tempfile.jar或任何你所說的。
+0

你可以鏈接到一些文件,解釋如何暫時將jar寫入磁盤?它是否與IOstream完成? – user2279474 2014-12-04 02:38:35