【问题标题】:Java EventQueue. When should I consider using it?Java 事件队列。我什么时候应该考虑使用它?
【发布时间】:2011-07-03 05:17:11
【问题描述】:

我目前正在查看 Oracle 网站上的 EventQueue 类: http://download.oracle.com/javase/1.4.2/docs/api/java/awt/EventQueue.html 但我不确定什么时候应该使用它?如果我的班级有两个或更多事件的侦听器,我应该使用它吗?

【问题讨论】:

  • 您可能希望使用最新版本(为此使用 documentation)。

标签: java swing awt eventqueue


【解决方案1】:

通常您不必向 EventQueue 提交任何事件,当用户执行他的操作(如鼠标点击等)或系统认为您的窗口需要重新绘制时,这一切都会“自动”发生。

我经常使用的仅有的两种方法是EventQueue.invokeLaterEventQueue.invokeAndWait()(不太常用)。如果您在 EDT(事件调度线程)之外执行一些操作,然后想要对 GUI 进行一些更改(例如向容器添加或从容器中删除组件),请使用其中之一,因为此类操作应该只发生在美国东部时间。

【讨论】:

  • 事件为什么要放在EventQueue中?为什么不能在它们发生时直接分派给组件?
  • 这个想法是只有一个线程来处理所有这些 GUI 东西,而不是几个线程(这简化了很多事情)。因此,如果在该线程被占用时发生了某些事情(例如用户交互),则首先将事件放入队列,然后在 EDT 有时间时分派。
  • 还有没有其他事件没有放入队列而是直接分派给组件?
【解决方案2】:

我在 14 年的 Java 编程中从未使用过它。

【讨论】:

    【解决方案3】:

    AWT 使用这些来处理您的 GUI 底层事务。通常,除非您在 AWT 之上构建一些 GUI 引擎,否则您不会使用它们。就像 Paulo 说的那样,有一个重要的方法 invokeLater 但通常你可以使用 SwingUtilities.invokeLater 达到相同的效果,这种方式似乎更经常使用。

    【讨论】:

    • SwingUtilities.invokeLaterEventQueue.invokeLater 完全相同,但第一个字符更长,因此总是有我的行(包括new Runnable(){public void run() {)不适合我的效果80 字符宽的屏幕,同时适合EventQueue.invokeLater。所以,明确的决定:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2016-05-09
    • 2011-03-21
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    相关资源
    最近更新 更多