我有一个java应用程序,它只用于启动许多应用程序中的一个。它注册为协议处理程序,并在公司门户中用于从浏览器中启动应用程序。
直到最近,这种方法还很有效。随着越来越多的人在家工作,访问网络资源的速度明显变慢。
我的怀疑是,应用程序已经启动,但java应用程序在应用程序成为独立进程之前就退出了。因此,应用程序不会启动。
我加了一个 Sleep
在退出之前,如果设置为大于1秒的值,则会有所帮助。
我的怀疑正确吗?有没有办法确保新流程在退出之前已经启动?
DefaultExecuteResultHandler handler = new DefaultExecuteResultHandler() {
@Override
public void onProcessFailed(ExecuteException e) {
log.error("Process failed: " + cmdLine.toString());
log.error("Message", e);
super.onProcessFailed(e);
}
@Override
public void onProcessComplete(int exitValue) {
log.info("Process complete: " + cmdLine.toString());
log.info("Exit code " + exitValue);
super.onProcessComplete(exitValue);
}
};
DefaultExecutor exec = new DefaultExecutor();
exec.execute(cmdLine, handler);
log.info("Process started");
Thread.sleep(1000); // give process time to start
log.info("Exiting");
return RET_OK;
1条答案
按热度按时间5rgfhyps1#
您正在异步启动defaultexecutor;请参阅其他问题defaultexecutor不等待结果(异步调用)和文档http://commons.apache.org/proper/commons-exec/apidocs/org/apache/commons/exec/defaultexecutor.html#execute(org.apache.commons.exec.commandline,%20org.apache.commons.exec.executeSultHandler)
您必须在处理程序中签入可能的结束或在没有处理程序的情况下启动执行器,因此它是同步的—请参阅http://commons.apache.org/proper/commons-exec/apidocs/org/apache/commons/exec/defaultexecutor.html#execute(org.apache.commons.exec.commandline)