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

时间:2011-02-18 14:55:24

标签: java

我是初学者,我尝试编写非常简单的java程序和 这里我有两个java程序。

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

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

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

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

因为我想将它们用于进一步的应用程序。

这可能吗? 我是否必须使用Process方法,如果我想通过java启动notepad.exe? 或者?

谢谢

5 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果要将它们作为单独的java进程启动,则应使用ProcessBuilder。您也可以在groovy中执行此操作,非常简单:

"java <arguments>".execute()

否则你可以通过调用@Heathen建议的main方法来“启动”它,尽管它们都将使用该方法在同一个JVM中运行。

答案 2 :(得分:0)

您可以按照描述使用Process方法,但是对于第一个程序完成依赖任意超时并不是明智的解决方案。相反,你应该等待第一个退出。

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

答案 3 :(得分:0)

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();

您可以访问Process对象的输入,输出和错误流,如果您想与正在运行的进程进行交互,则非常有用。

您可以在以下位置找到有关Process对象的更多信息 http://download.oracle.com/javase/6/docs/api/java/lang/Process.html

答案 4 :(得分:0)

例如我的代码是:

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();
}
  }
}

如果我用notepad.exe替换proc [1]它运行良好

谢谢