我创建了一个ScheduledTask,该任务执行对创建一些xml文件的外部.jar的调用,我希望它每4分钟运行一次。 每次运行外部.jar时,都会创建一个新实例,但我希望它关闭现有实例并创建一个新实例。
基本上这是我的代码:
busList
//。bat只需调用java -jar myapp.jar
那是一次只能运行一个实例的那个。 每次运行此runnable时,它都会调用bat并由JVM创建一个新实例。
我尝试在执行程序外部创建Process实例,并执行类似的操作
private static void RunInvoiceProcesses(Properties props) {
ScheduledExecutorService executorService =
Executors.newScheduledThreadPool(executorService.scheduleAtFixedRate(new
Runnable() {
@Override
public void run() {
Runtime.getRuntime().exec("cmd /c call C:\\creinvoice\\XMLGen\\runxmlgen.bat");
}
},
15,
240,
TimeUnit.SECONDS);
,但是看来您只能将最终变量带入可运行变量,所以这是不可能的。 当然,我尽力研究了所有相关信息,但是如果您至少可以指出正确的方向,我将不胜感激!
答案 0 :(得分:2)
来自Javadoc
如果执行此任务 *花费的时间超过其时间,然后执行 *可能会延迟启动,但不会同时执行。
因此,您只需要等待可运行文件中的过程完成即可,如下所示:
public class Content extends Object{
private String key;
private String value;
private String keyVal;
public Content (String key, String value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public String getValue() {
return value;
}
public String getKeyValue(){
return key+value;
}
public void display(){
System.out.println(this.key+","+this.value);
}
}
在这种情况下,您的Process p = Runtime.getRuntime().exec(...);
p.waitFor();
将等待基础过程完成,并且由于Runnable
的工作方式,您的过程不会重叠执行。