【发布时间】:2016-07-19 10:58:08
【问题描述】:
我有一个 swing 应用程序,我正在执行一个 jar 文件,该文件将在内部进行一些处理。我的流程如下: 1. 一个带有main() 的java 文件,它加载swing GUI。从那个 GUI 我可以浏览和加载所需的 jar 文件来执行。
public static void main(String[] args)
{
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
MigrationProcessElementDialog.createAndShowGUI();
}
});
}
- 从 swing 应用程序中,我将 jar 文件加载为:
Runtime rt = Runtime.getRuntime();
// replacePath is the path of the jar file to be loaded.
Process proc = rt.exec("java -jar " + replacePath);
int exitVal = proc.waitFor();
当我从任务管理器触发执行时,我看到两个 javaw.exe(一个用于 Eclipse,一个用于 SWING GUI)和一个用于程序流的 java.exe。 但是程序流程继续几次(从日志更新中可以看出)但在一段时间后卡住了。
一旦我杀死了我的 swing GUI javaw.exe;程序流程立即开始并继续其余部分。所以在我看来,javaw.exe 以某种方式阻止了 java.exe 的执行。有可能吗?它的分辨率是多少?
如果我执行,我的进程可执行 jar 从命令提示符使用普通 java -jar "path" 命令,程序流程不会卡住,它按预期工作。
仅当我从 GUI 执行或使用运行时时才会遇到问题。我也使用了 ProcessBuilder;但面临同样的问题。
如果有人可以请给我任何线索,这将非常有帮助。谢谢!
【问题讨论】:
-
另请参阅When Runtime.exec() won't,了解有关正确创建和处理流程的许多好技巧。然后忽略它引用
exec并使用ProcessBuilder来创建进程。还将String arg拆分为String[] args以解决包含空格字符的路径之类的问题。
标签: java swing processbuilder runtime.exec