java - 在外部应用程序完全运行时获取通知 - Java

标签 java linux runtime.exec external-application

我正在用 java 编写一个程序,它可以启动诸如 firefox 之类的应用程序。

编辑:此程序适用于 linux,特别是 ubuntu。

启动程序很简单:

Runtime.getRuntime().exec("/usr/bin/firefox");

但是,我想在窗口完全打开或运行后从中检索详细信息。

此刻我正在打电话:

Thread.sleep(delay);

确保窗口准备就绪,但这是一个糟糕的解决方案。不同的窗口需要不同的延迟是一个问题。

凌乱。

所以我的问题是,当 firefox(或与此相关的任何其他外部应用程序)完全设置时,有什么方法可以通知我吗?我不认为我可以使用 Process.waitFor() 因为在 firefox 关闭之前进程不会完成。

提前致谢!

更新:Process.waitFor() 不起作用。我试过了,它只在 firefox 关闭时返回,而不是在完全设置时返回。对于任何自己尝试过的人来说,如果另一个 firefox 窗口已经打开,它就可以工作(一开始我被骗了)但如果没有现有的窗口,它就不会!

最佳答案

您可以使用 Process#waitFor 等待命令执行,然后检查 exitValue,如下所示:

Process p = Runtime.getRuntime().exec("/usr/bin/firefox");
p.waitFor();

if(p.exitValue()==0) {

  //success
} else {
  // fail read error stream or out stream for possible causes
}

关于java - 在外部应用程序完全运行时获取通知 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24802470/

相关文章:

java - 如何执行带参数的命令?

java - Runtime.exec 字符串给出语法错误

java - 如何将反向比较器重写为通用类型?

java - java网络编程

linux - 在 bash 生态系统中为逗号分隔的字符串添加后缀

c++ - 在 Linux Mint 上编译 Qt - OpenGL 功能测试失败

java - 如何在 Java 中使用自定义类型注解

JavaFX - 无法解析符号 'font' (FXML)

c++ - 如何使用 C/C++ 获取数字锁定状态?

java - android 7 : NullPointerException on APK installing with Runtime. getRuntime().exec