Java ScheduledExecutorService的重新调度
下面的代码段是从JMenuItem的ActionListener调用的。只需启动一个jar文件Java ScheduledExecutorService的重新调度,java,concurrency,Java,Concurrency,下面的代码段是从JMenuItem的ActionListener调用的。只需启动一个jar文件 ScheduledExecutorService schedulerExecutor = Executors.newScheduledThreadPool(2); Callable<Process> callable = new Callable<Process>() { @Override public Process call() throws Excep
ScheduledExecutorService schedulerExecutor = Executors.newScheduledThreadPool(2);
Callable<Process> callable = new Callable<Process>() {
@Override
public Process call() throws Exception {
Process p = Runtime.getRuntime().exec("cmd /c start java -jar D:\\MovieLibrary.jar");
return p;
}
};
FutureTask<Process> futureTask = new FutureTask<Process>(callable);
schedulerExecutor.submit(futureTask);
schedulerExecutor.shutdown();
System.exit(0);
ScheduledExecutorService schedulerExecutor=Executors.newScheduledThreadPool(2);
Callable Callable=new Callable(){
@凌驾
公共进程调用()引发异常{
进程p=Runtime.getRuntime().exec(“cmd/c start java-jar D:\\MovieLibrary.jar”);
返回p;
}
};
FutureTask FutureTask=新的FutureTask(可调用);
ScheduleExecutor.submit(未来任务);
schedulerExecutor.shutdown();
系统出口(0);
但问题是,这只是执行一次。不重复。这意味着进程p=Runtime.getRuntime().exec(“cmd/cstartjava-jard:\\MovieLibrary.jar”)代码>不会被第二次调用
schedulerExecutor.submit(futureTask);
schedulerExecutor.submit(futureTask);
我怎样才能走到右边
任何建议都是可以接受的。提前感谢。newScheduledThreadPool(2)并不意味着线程运行两次。 这是游泳池的大小。 如果要再次运行任务,请将其“提交”两次
schedulerExecutor.submit(futureTask);
schedulerExecutor.submit(futureTask);
谢谢你的回复。不,newScheduledThreadPool(2)不会使其运行两次。据我所知,使用两个线程将使任务变得复杂。我也试过两次或多次提交任务,但都没有成功。实际上,JMenuItem会自行重新启动应用程序。但它只重新启动了一次(如果您试图从控制台手动运行MovieLibrary,是否可以运行两次?不,它只执行一次。如果我从eclipse运行它,它将运行两次。如果您无法使用“java-jar D:\\MovieLibrary.jar”从控制台运行两次MovieLibrary),然后还有另一个问题?可能它侦听的端口无法绑定两次或类似的内容。我真的很抱歉。我犯了一个错误,编写了新代码并构建了它,但忘了用新构建替换D:\\MovieLibrary。无论如何,感谢您的帮助。:)