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

Java:具有后台线程的GUI应用程序

  •  1
  • Luhar  · 技术社区  · 16 年前

    编辑 :使事情更清楚-

    我有一个连接到远程服务器并更新GUI的应用程序。应用程序使用MVC模式。

    2) GUI控制器类实现PropertyChangeListener接口,侦听模型的更新,并更新GUI视图类

    3) 应用程序能够在GUI上执行用户操作之后将消息发送回远程服务器。这将使用从远程服务器接收数据的同一对象。

    我目前在main方法中初始化“远程服务器通信”对象和GUI类。由于通信对象可以独立地更新模型,我应该使用SwingUtilities.invokeLater()初始化这个对象吗?

    3 回复  |  直到 16 年前
        1
  •  2
  •   Powerlord    16 年前

    我不完全确定我是否理解你,但我还是有一件事要说--

    无论如何,这意味着您可以在任何时候使用invokeLater从不同的线程更新GUI。时期

    对于修改后的消息,我可能会建议,如果您有可能发生线程争用并且正在执行GUI I/O,那么处理它的一种方法就是在invokeLater中执行所有“有争议的”工作。

    尽管在主线程中实例化一个GUI基本上是合法的(直到setVisible(true)--理论上,如果有来自另一个线程的冲突,invokeLater将以一种非常确定的方式处理这一切。

        2
  •  1
  •   OscarRyz    16 年前

    对

    如果我理解正确的话,就会发生这种情况。

    供应商库将启动自己的线程,并最终在代码中回调给定的方法。

    如果你的应用程序反过来必须与供应商的远程服务器通信,你需要使用自己的线程。那么答案是肯定的。

    如果您只是对供应商库发送给您的内容做出“反应”,那么就不需要单独的线程。

        3
  •  1
  •   Powerlord    16 年前

    换句话说, 从未 使用它来运行后台任务,因为它将阻止GUI响应。子类 SwingWorker 相反,如Sun的 tutorial ,或其他背景 Thread S