Java是否对事件有本机支持,类似于C#?

时间:2009-01-12 16:46:08

标签: java events

我对Java听不到的事情感到有点困惑。

但我知道它会做GUI事件。

我错过了什么吗? java有事件处理机制吗?

我知道我可以实现发布者订阅者模式,但我正在寻找Java中的本机支持。

我似乎记得Java 5或6中有关Java添加事件的一些内容,但我不记得我在哪里听到这个并且我可能正在编写它。

基本上我将设备包装在java类中,设备会抛出事件,而我正在寻找暴露这种情况的最合理方式。我主要来自.Net背景,我正在寻找像.Net(C#)

中的事件

任何帮助都将不胜感激。

10 个答案:

答案 0 :(得分:15)

正如您已经说过的,您可以使用publisher-subscriber / Observer模式执行完全相同的操作。它只需要更多的腿部工作。

不,Java没有对事件的本机支持,比如C#和代理一样。

答案 1 :(得分:4)

其他人提出的订阅/发布机制可让您实施同步事件。对于异步事件循环(激发和忘记)您可能想要查看“演员”。 Actor<A>由A类消息(事件)的处理程序组成,以及执行处理程序的线程策略。这使您可以执行并发的异步事件处理,如下所示:

public class EventExample {
  public static void main(String[] args) {
    while ((char c = System.in.read()) >= 0) {
      eventHandler.act(c);
    }
  }

  public static Actor<Character> eventHandler =
    Actor.actor(Strategy.simpleThreadStrategy(), new Effect<Character>() {
      public void e(Character c) {
        // Do something with c here.
      }
    });
}

Get the actors library here. See the Javadoc here.

答案 2 :(得分:1)

从我记得的Java(在> 6个月内没有使用它),我认为没有事件ala .NET。您最好的选择可能是利用发布者/订阅者模式。它非常容易实现,非常可靠。

答案 3 :(得分:1)

答案 4 :(得分:0)

Swing或AWT,它们是Java UI工具包,都处理事件 - 请查看official Swing event tutorial示例。您需要在Swing中编写UI,以便能够为这些事件注册监听器。

答案 5 :(得分:0)

我不了解C#,但非UI组件的Java Bean当然可以使用事件通知监听器状态更改:

http://java.sun.com/developer/onlineTraining/Beans/beans02/

这是Java Beans规范的一部分,因为它首次出现。请注意教程上的日期:它是2000年的老式。

源和侦听器必须在同一个JVM中运行。您必须使用代理与另一个JVM中运行的东西进行通信,但是可以完成。

我用Google搜索了C#事件教程,找到了this。 Java注册监听器和触发属性更改事件让人想起我在浏览C#教程时所看到的内容。我错过了一些重要的事吗? (我承认我没有深入阅读 - 现在没时间。)

答案 6 :(得分:0)

Java中没有本机支持 - 您必须实现Observer Pattern(又称Subcribe / Publish)。它很直接 - 不超过十几行代码。

答案 7 :(得分:0)

您可能还想查看开源EventBus库,与标准发布者/订阅者模式相反,它使用中介类(事件总线)以减少所需的紧密耦合。发布者/订阅者模式(订阅者必须知道所有发布者注册他们,这并不总是可行并且通常很麻烦)。

我在GUI应用程序中使用它,但它可以处理任何类型的事件。

答案 8 :(得分:0)

java.util.Observable @since JDK1.0

答案 9 :(得分:-1)

你需要线程。 java中的GUI有事件,因为有一个专用的线程可以调度UI事件。还有一些叫做“Observer”和“Observable”(这是来自GUI的东西的味道中立版本的事件监听器),但只是设计模式...