2012-10-13 87 views
0

我需要一種方法來在我的應用程序中運行另一個Java應用程序。我想要將它的輸出複製到JTextArea中並通過JTextBox發送輸入。在Java程序中運行另一個Java程序並獲取輸出/發送輸入

+0

您是否需要運行整個程序?你可以從程序中的其他代碼庫執行適當的Java代碼嗎? – Bill

+0

您是否控制其他應用程序的來源?什麼是其他應用程序?順便說一句 - 沒有像JTextBox這樣的東西 - 請複製/粘貼這些東西。 –

+0

我需要運行並控制整個程序並接收其輸出/發送輸入 – Taketheword

回答

2

取決於。

您可以使用自定義的URLClassLoader加載第二個應用程序jar並直接調用主類main方法。顯然,這個問題是需要有一個從程序輸出;)

另一個解決辦法是使用一個ProcessBuilder通過InputStream

問題推出一個java程序和讀取輸出這裏試圖找到java可執行文件。一般來說,如果它在路上,你應該沒問題。

你可以看看this作爲如何讀取輸入流

更新,例基線例如

這是我的「輸出」的程序,產生輸出...

public class Output { 
    public static void main(String[] args) { 
     System.out.println("This is a simple test"); 
     System.out.println("If you can read this"); 
     System.out.println("Then you are to close"); 
    } 
} 

這是我的 「閱讀器」 程序,讀取輸入...

public class Input { 

    public static void main(String[] args) { 

     // SPECIAL NOTE 
     // The last parameter is the Java program you want to execute 
     // Because my program is wrapped up in a jar, I'm executing the Jar 
     // the command line is different for executing plain class files 
     ProcessBuilder pb = new ProcessBuilder("java", "-jar", "../Output/dist/Output.jar"); 
     pb.redirectErrorStream(); 

     InputStream is = null; 
     try { 

      Process process = pb.start(); 
      is = process.getInputStream(); 

      int value; 
      while ((value = is.read()) != -1) { 

       char inChar = (char)value; 
       System.out.print(inChar); 

      } 

     } catch (IOException ex) { 
      ex.printStackTrace(); 
     }   
    } 
} 

您還可以結賬Basic I/O獲取更多信息

+0

問題是我對Java有很好的理解,但是我沒有ProcessBuilder的經驗或者對InputStreams有太多的經驗。在一個側面說明..你在哪裏學習更多的Java?我已經準備好2本書,並在線觀看/閱讀。 – Taketheword

+0

*「你在哪裏學習更多的Java?」*與本網站無關,你沒有問我,但我會冒險回答。我主要從Java教程學習,在這個網站上找到的答案,以及在這個網站上詢問(回答)問題。當你的同事指着你並大笑時,對這個網站上一個問題的回答可能非常具有啓發性,然後用難以理解的細節描述你答案中的錯誤。 ;) –

+0

是的,這個網站上的答案是非常有幫助的,但我需要一般的幫助學習。本網站有助於解釋要使用的內容,而不是如何使用它。 – Taketheword

相關問題