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