如何通过另一个同时启动两个java程序?

问题描述:

我是一个初学者,我尝试编写非常简单的java程序和 在这里我有两个java程序。如何通过另一个同时启动两个java程序?

从文件夹中选择最近文件的第一个程序。

连接这些最新文件的第二个程序。

我想要创建的第三个java程序 - 将启动第一个程序。 - 然后等待10秒 - 启动第二个Java程序。

我想单独保存第一个和第二个程序。

因为我想用它们作进一步的应用。

是可能的吗? 我是否需要使用Process方法,如果我想通过java启动notepad.exe? 还是?

谢谢

+1

我非常反对任何建议调用main(String [])或使用Process的答案。将其他类添加到运行时类路径中非常简单,可以通过构造函数实例化它们,然后根据需要调用该类的方法。如果有必要调用Thread。在这个过程中的任何阶段都可以睡(),这是一个明确的标志,表明设计和编码中出现了问题。 – 2011-02-18 15:13:41

如果要启动它们作为独立的Java进程,您应该使用ProcessBuilder。你也可以做到这一点的常规,非常简单的:你通过

"java <arguments>".execute() 

否则会“推出”它调用的主要方法,通过@Heathen的建议,虽然他们都在与该方法相同的JVM上运行。

+0

ProcessBuilder只启动.exe文件,而不是.java或.jar文件 – user618111 2011-02-19 10:34:40

主要方法没有什么特别之处。如果你喜欢,你可以直接从第三个程序中调用它。

public static void main(String[] args) throws Exception { 
    Program1.main(args); 
    Thread.sleep(10000); 
    Program2.main(args); 
}  
+0

感谢您的快速回复,我尝试了不同的方式... – user618111 2011-02-18 15:11:47

像你描述你可以使用过程方法,但它是不依赖于第一个节目结束的任意超时一个明智的解决方案。相反,你应该等待第一个退出。

顺便说一句,您可以生成两个jar文件,每个作业一个。然后,您可以轻松地为每个应用程序创建一个应用程序,并且可以轻松地将它们组合起来以创建用于组合作业的第三个应用程序这比从Java创建处理好得多。

ProcessBuilder builder1 = new ProcessBuilder("firstProgram", "arg1", "arg2", ...); 
ProcessBuilder builder2 = new ProcessBuilder("secondProgram", "arg1", "arg2", ...); 
Process proc1 = builder1.start(); 

//Pauses for 10 seconds 
Thread.sleep(10000); 

Process proc2 = builder2.start(); 

//This next part is necessary to wait for the programs to finish. If you want them to 
//run independently of the main thread, you can omit this part 
int exitVal1 = proc1.waitFor(); 
int exitVal2 = proc2.waitFor(); 

,如果你想与正在运行的进程进行交互,您可以得到一个处理对象的输入,输出和错误流,非常有用。

您可以在 http://download.oracle.com/javase/6/docs/api/java/lang/Process.html

找到有关Process对象的更多信息,例如我的代码是:

import java.io.IOException; 

public class Launcher 
{ 
    public static void main(String args[]) throws IOException, InterruptedException 
    { 

    try { 
    Process[] proc = new Process[2]; 
    proc[0] = new ProcessBuilder("calc.exe").start(); 
    Thread.sleep(3000); 
    proc[1] = new ProcessBuilder("D:\\NetBeansProjects\\GetIPAddress\\dist\\GetIPAddress.jar").start(); 

    try { 
     Thread.sleep(3000); 
    } 
    catch (InterruptedException ex) 
    { 
    } 
    proc[0].destroy(); 
    Thread.sleep(3000); 
    proc[1].destroy(); 

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

如果我更换PROC [1]的notepad.exe它的工作好

谢谢