【发布时间】:2015-08-21 09:25:10
【问题描述】:
我使用 Process proc Runtime.getruntime.exec(); 从我的 java swing 文件中启动一个 JAR 文件,我需要将其关闭,以便它在所有操作系统上都能正常工作。
我已经尝试过proc.detroy();,但这并不能让它完全关闭,并且会导致程序出现问题。
我需要做什么才能让它在所有操作系统上安全关闭?
我认为我需要检查正在使用的操作系统并分别处理每个操作系统,但应该如何才能安全地关闭每个操作系统?
这里是 StartStop.java 代码:
public class StartStop {
static Process proc = null;
public void program() {
new Thread() {
public void run() {
try {
proc = Runtime.getRuntime().exec("java -jar DEDServer_release.jar");
String res = org.apache.commons.io.IOUtils.toString(new BufferedReader(new InputStreamReader(proc.getErrorStream())));
if(res.contains("Error")){
JOptionPane.showMessageDialog(null, "Failed to start DEDServer. Make sure that this file is in the same directory as DEDServer_release.jar");
}
}catch (IOException e) {
JOptionPane.showMessageDialog(null, "Failed to start DEDServer. Make sure that this file is in the same directory as DEDServer_release.jar");
}
}
}.start();
}
}
感谢您的帮助。
【问题讨论】:
-
JOptionPane 必须包含在 invokeLater 中,更多请阅读 Oracle 教程 Initial Thread
-
为什么 process.destroy() 不起作用?
-
@JPMoresmau 问题中说...“我已经尝试过 proc.detroy(); 但这并不能让它完全关闭,并且会导致程序出现问题。”跨度>
-
好吧 process.destroy() 杀死子进程,这就是它应该做的。 Java 的全部意义在于您不必编写特定于平台的代码。所以你应该明白为什么你的程序在请求时没有关闭。可能更好的方法是能够向您的 DEDServer 程序发送命令以使其干净地关闭。
-
你需要阅读stackoverflow.com/questions/2950338/…,stackoverflow.com/questions/191215/…。我的建议不是通过操作系统特定的方式,而是让您的服务器代码监听“退出”命令的标准输入。当它收到该命令时,它会优雅地关闭。
标签: java swing process runtime shutdown