2017-05-14 65 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(); 
} 
} 

我还没有回答为什么原始代码不工作,虽然。