我正在开发一个小型 Java jar 应用程序,用于使用 BaseX 服务器在 file.xml 中存储数据。 首先,在主程序启动之前,我需要正确启动并激活 Basex Server。所以这就是我所做的:
Runtime runtime = Runtime.getRuntime();
if (isWindows(os)) {
Process server = runtime.exec("cmd /C basexserver.bat");
System.out.println(server.waitFor());
}
else {
if (isLinux(os)) {
runtime.exec("basexserver");
}
}
为了检查 BaseXServer 是否正确运行,我尝试检查 waitFor 方法返回的值,如果该值等于 0,则命令已成功执行,而如果返回值大于 0,则发生错误。问题是这个方法总是返回 1,但命令“basexserver.bat”是正确的。为什么?
最佳答案
如果进程在启动后进入后台,您可以检查 exitValue()
是否为零。其次,您可以使用 getErrorStream()
和 getInputStream()
方法附加到错误和标准输出。并监视它们的错误消息。也看看流吞噬者模式,它可能很有用。如果某些进程的输出未被消耗,则可能会卡住。
https://docs.oracle.com/javase/7/docs/api/java/lang/Process.html http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html
关于Java:如何检查程序是否已正确启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27169723/