我对Java听不到的事情感到有点困惑。
但我知道它会做GUI事件。
我错过了什么吗? java有事件处理机制吗?
我知道我可以实现发布者订阅者模式,但我正在寻找Java中的本机支持。
我似乎记得Java 5或6中有关Java添加事件的一些内容,但我不记得我在哪里听到这个并且我可能正在编写它。
基本上我将设备包装在java类中,设备会抛出事件,而我正在寻找暴露这种情况的最合理方式。我主要来自.Net背景,我正在寻找像.Net(C#)
中的事件任何帮助都将不胜感激。
答案 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.
}
});
}
答案 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的东西的味道中立版本的事件监听器),但只是设计模式...