2013-11-21 175 views
0

我一直在swing应用程序中工作。我有一个JFrame有一些按钮和字段。从java代码运行exe

在某些按钮上单击事件,我从当前目录打开一个exe文件。一切正常。

try { 
     Runtime.getRuntime().exec(System.getProperty("user.dir") + 
     "\\Upgrade\\Upgrade.exe"); 
     } catch (IOException ex) { 
     ex.printStacktrace(); 
     } 
    this.dispose(); // disposing my current java file. 

,但我需要的是退出打开exe文件后的Java代码。

任何人都可以帮助解决这个问题。

+1

你不能。如果父进程关闭,子进程也将关闭。 – Kayaman

+2

你可以不只是做System.exit(0); – david99world

+0

这个怎么样? http://stackoverflow.com/questions/287633/java-c-like-fork – Carlo

回答

0

你可以尝试使其成为一个过程,然后等待该进程退出之前完成,像这样:

class SO { 
public static void main(String args[]) { 
try { 
    Process proc = Runtime.getRuntime().exec("your command"); 
    proc.waitFor(); //Wait for it to finish 
    System.exit(0); 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 
} 
} 
+0

谢谢..它作品..! – SanCJ

+0

@SanCJ很高兴它的工作原理,如果你有机会,我可以请一个绿色的勾号来表明问题的答案为D = D – Levenal

0

执行从Java中使用的Runtime.exec()的应用是众所周知的问题的根源。就像等待进程完成一样,但不要使用流缓冲区中的数据,这对于您的应用程序来说是一个肯定的方式。

我建议你使用像Apache Common Exec这样的库来处理这个问题。

我在一个项目中工作了一段时间,我们使用Runtime.exec()来启动一个最终将通过现有文件提取文件的进程。除了用于分级的一台机器之外,所有这些都运行良好 - 它只会挂起。原来在这台登台机器上,有人设置了日期/时间,所以它看起来很喜欢在比现有的更早的地方提取新文件,导致外部进程为每个文件生成一条警告消息,使错误缓冲区溢出 - 我们的应用程序没有消耗!