代码之家  ›  专栏  ›  技术社区  ›  rmeador

Java中的异步UI

  •  3
  • rmeador  · 技术社区  · 14 年前

    我正在研究一个Java程序,自从我上次使用Java以来已经有一年多了,所以我有点生疏了。此程序使用 Runtime.exec() 要调用其他程序来完成它的脏工作,需要在其他程序工作时分析它们的输出并相应地实时更新自己的GUI。最好的方法是什么?我目前正在考虑让我的外部程序执行器类有自己的内部线程,该线程对外部程序的输出流进行轮询,然后在发生值得注意的事情时引发事件,然后实现自己的 EventListener 我的UI类的接口。不过,我担心这将如何处理被激发事件的异步性质。有人能就如何保护听众不受比赛条件的影响和/或更好的方法给出任何建议吗?谢谢。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Pindatjuh    14 年前
    • 您不必在外部进程中对输出进行轮询。这个 Process 从返回的对象 Runtime.exec(String) 有方法获得 InputStream 对于stderr和stdout以及 OutputStream 用于STDIN。
    • 您可以通过 输出流 . 只需将数据推送到流中即可。
    • 产卵A Thread 等着性病发作 输出流 . 每次有新数据要读取时,它都会读取数据并创建一个事件。
    • 使用事件调度程序线程EDT调度事件。它也被Swing/AWT GUI使用,所以没有问题。
    • 您还可以使用事件将内容发送到stdin。只需创建一个 EventListener 它监听某些输出事件。这些事件(可能转换为其他格式)将 输出流 并且可以被外部进程的stdin读取。

    祝你好运。