Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过另一个java程序同时启动两个java程序?_Java - Fatal编程技术网

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

如何通过另一个java程序同时启动两个java程序?,java,Java,我是一个初学者,我尝试编写非常简单的java程序和 这里我有两个java程序 从文件夹中选择最近文件的第一个程序 用于连接这些最近文件的第二个程序 我想要的是创建第三个java程序 -将启动第一个程序。 -然后等待10秒 -启动第二个java程序 我想分别保存第一个和第二个程序 因为我想把它们用于进一步的应用 有可能吗? 如果我想通过java启动notepad.exe,是否必须使用过程方法? 否则呢 谢谢如果要将它们作为单独的java进程启动,应该使用ProcessBuilder。您也可以在gr

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

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

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

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

我想分别保存第一个和第二个程序

因为我想把它们用于进一步的应用

有可能吗? 如果我想通过java启动notepad.exe,是否必须使用过程方法? 否则呢


谢谢

如果要将它们作为单独的java进程启动,应该使用
ProcessBuilder
。您也可以在groovy中这样做,非常简单:

"java <arguments>".execute()
“java.execute()

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

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

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

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

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

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();
您可以访问流程对象的输入、输出和错误流,如果希望与正在运行的流程交互,这将非常有用

您可以在以下位置找到有关流程对象的更多信息:
例如,我的代码是:

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],它会正常工作


谢谢

我非常反对任何建议调用main(String[])或使用进程的答案。将其他类添加到运行时类路径中,通过构造函数实例化它们,然后根据需要调用类的方法,要简单得多。如果在这个过程的任何阶段都需要调用Thread.sleep(),这就是设计和编码出错的明确标志。ProcessBuilder只启动.exe文件,而不启动.java或.jar文件