2012-02-22 44 views
0

以下代码片段从JMenuItem的ActionListener中调用。它只是启动一个jar文件。重新计划ScheduledExecutorService

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

但问题是,它只执行一次。不重复。这意味着Process p = Runtime.getRuntime().exec("cmd /c start java -jar D:\\MovieLibrary.jar");不会被第二次调用。

我该怎么做才对?

任何建议是可观的。提前致谢。

回答

1

newScheduledThreadPool(2)并不意味着该线程运行两次。 这是池的大小。 如果您想要第二次运行该任务,请将该任务“提交”两次。

schedulerExecutor.submit(futureTask); 
schedulerExecutor.submit(futureTask); 
+0

感谢您的回复。没有肯定newScheduledThreadPool(2)不会使它运行两次。我所理解的是它会使任务使用两个线程。此外,我试图提交两次或更多次的任务,但没有奏效。实际上,JMenuItem自己重新启动应用程序。但它只重启一次。 :( – 2012-02-22 09:53:13

+0

如果你尝试从控制台手动运行MovieLibrary,你可以运行两次吗? – 2012-02-22 09:57:02

+0

不,它只执行一次,如果我从eclipse运行它然后运行两次 – 2012-02-22 09:59:31

相关问题