2017-05-14 66 views
0

真正的目標:創建一個調用其他程序(實驗練習)程序java文件通過進程來運行其他的.java(幀)

當前的目標:讓Main.java運行Lab4 GUI程序(Lab4Ans201506159.java - 文件名)

Lab4Form和Lab4Intro是形式

這裏是Main.java代碼

public class Main { 
public static void main(String[] args) throws IOException { 
    // TODO code application logic here 
    Process p,p2,p3,p4; 
    p = Runtime.getRuntime().exec("javac Lab4Ans201506159.java"); 
    //p3 = Runtime.getRuntime().exec("javac Lab4Ans201506159Form.java"); 
    //p4 = Runtime.getRuntime().exec("javac Lab4Ans201506159Intro.java"); 
    p2 = Runtime.getRuntime().exec("java Lab4Ans201506159"); 
    //p2 = Runtime.getRuntime().exec("Lab4Ans201506159"); 
} 

這裏是Lab4代碼

Lab4Form和Lab4Intro是框架

什麼Lab4正在試圖做的顯示Lab4Intro,而當它是封閉的,Lab4Form是可見

public class Lab4Ans201506159 { 
public static void main(String[] args) throws InterruptedException { 
    Lab4Ans201506159Intro intro = new Lab4Ans201506159Intro(); 
    intro.setLocationRelativeTo(null); 
    intro.setVisible(true); 

    Thread.sleep(2000); 
    //Lab4Ans201506159Form form = new Lab4Ans201506159Form(); 
    while(intro.isActive()) 
    { 
    } 

    if(intro.isActive() == false){ 
     Lab4Ans201506159Form form = new Lab4Ans201506159Form(); 
      form.setLocationRelativeTo(null); 
      form.setVisible(true); 
    } 

} 

問題:運行Main.java將導致一個「編譯成功「,但不顯示GUI。我需要答案爲什麼它不顯示或工作。

回答

0

我只是懷疑第一個進程被執行,以確保,你是否已經嘗試的Runtime.exec的輸出重定向到標準輸出

類似的東西:

public static void main(String[] args) throws Exception { 
     System.setOut(new PrintStream(new FileOutputStream("log.txt"))); 
     System.out.println("Init..."); 

     try { 
      String line; 
      Process p = Runtime.getRuntime().exec("javac Lab4Ans201506159.java"); 

      BufferedReader in = new BufferedReader(
        new InputStreamReader(p.getInputStream())); 
      while ((line = in.readLine()) != null) { 
      System.out.println(line); 
      } 
      in.close(); 
     } 
     Thread.sleep(1000); 

     Process p2 = Runtime.getRuntime().exec("java Lab4Ans201506159"); 

     BufferedReader in2 = new BufferedReader(
        new InputStreamReader(p2.getInputStream())); 
      while ((line = in2.readLine()) != null) { 
      System.out.println(line); 
      } 
      in2.close(); 
     } 


     catch (Throwable e) { 
      e.printStacktrace(); 
     } 
    } 

就像你可以驗證出了什麼問題... 好運

+0

該代碼僅在log.txt中打印「Init ...」。這是什麼意思? – iambuzzify

+0

我想這意味着沒有錯誤是正確的?但它仍然不顯示它應該顯示的GUI。 – iambuzzify

+0

你正在使用哪個操作系統?基於您正在使用的操作系統你有不同的選擇看看這裏:http://www.rgagnon.com/javadetails/java-0014.html – navy1978

0

我設法完成了我打開Lab4的最終目標。我有點採取了不同的方法。我懷疑它不起作用的原因之一是因爲我的類路徑一定是錯的。我可以這樣說,因爲我無法在CMD提示符下編譯(javac)。所以我解決了這個問題,然後我'清理並構建'(使用Netbeans)項目(lab4,簡介,表單)。之後,在編譯器的最後一行中會有一行,如「java -jar C:\ sdfsafs \ blablabal」。這是我在runtime.exec()內部使用的線,它終於奏效了。

public static void main(String[] args) throws Exception { 

try { 
    runProcess("java -jar \"C:\\Users\\Aldrin\\Desktop\\201506159AnsLab4\\dist\\201506159AnsLab4.jar\""); 
    //runProcess("dir"); 
    //runProcess("java Lab4Ans201506159"); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
} 

我還沒有回答爲什麼原始代碼不工作,雖然。