2013-04-03 18 views
0

這就是我想做的事:從一個java文件,該文件是通過運行時加載的啓動JAR文件... EXEC(「」)觸發方法

我需要從開始出兩個JAR文件的一個java文件,我想從第一個啓動的jar文件中調用一個方法,當我從第二個jar文件讀取特定狀態時。我想出瞭如何從jar文件中讀取outsputstream。 (我也知道,它不是打印出來的jar文件,而是jar文件中的類,我只是用這種方式來描述問題,以清楚地解釋我使用的是一個java文件,其中我啓動了兩個jar文件)

long l = System.currentTimeMillis(); 
Process theProcess1 = Runtime.getRuntime().exec("java -jar \"C:/test.jar\""); 

inStream = new BufferedReader(new InputStreamReader(theProcess1.getInputStream())); 
... 

我現在可以讀取jar文件的輸出。

關於一個特殊的關鍵字,我希望首先啓動的jar運行某個方法(非靜態)。

例如爲:

if(theProcess2 output a certain statuscode) 
{ 
    start a certain Method from executed jar file "in" theProcess1 

} 

我認爲它可以通過使用theProcess1輸出是可能的,但我不知道如何閱讀JAR文件此流。 (JAR文件中不知道它是通過Java文件開始。

什麼想法?

回答

1

無法訪問另一個java程序的類加載器的類定義。 請參閱如何裝入罐子這個問題正確:How to load a jar file at runtime

一旦你的罐子被加載,你可以使用的Class.forName訪問第二個罐子所需類

編輯: 這裏是一個小片段,幫助你閱讀過程標準輸出

//open a buffered reader on process std output 
    InputStreamReader ir = new InputStreamReader(theProcess1.getInputStream()); 
    BufferedReader in = new BufferedReader(ir); 

    //read it line per line 
    String line; 
    while ((line = in.readLine()) != null) { 

     System.out.println(line); 

    } 
+0

嘿,謝謝。我需要在單獨的虛擬機中運行兩個罐子。我認爲一定可以使用Process類的輸出流?但是我怎樣才能在我的jar文件中將它用作輸入流? – gemorra

+0

這是一個硬約束,但你可以嘗試在這裏給出的答案的方法http://stackoverflow.com/questions/1781091/java-how-to-load-class-stored-as-byte-into-the-jvm從字節加載一個類。我認爲你應該通過使用RMI來重新考慮你的設計(或者其他遠程方法調用策略)。 –

+0

對不起,我剛剛意識到我可能已經被你的問題表達式弄糊塗了。你想要一個Java程序對另一個Java程序的控制檯輸出作出反應嗎? –

相關問題