2009-01-12 7 views
7

Estoy un poco confundido de lo que he oído que Java no hace eventos.¿Java tiene soporte nativo para eventos, similar al de C#?

Pero sé que hace eventos GUI.

¿Echo de menos algo? ¿Java tiene un mecanismo de manejo de eventos?

Soy consciente de que puedo implementar un patrón de suscriptor de editor, pero estoy buscando soporte nativo dentro de Java.

Parece que recuerdo algo sobre Java Agregar eventos en Java 5 o 6, pero no recuerdo dónde escuché esto y es posible que lo esté inventando.

Básicamente estoy envolviendo un dispositivo en una clase java el dispositivo arroja eventos, y estoy buscando la forma más lógica de exponer esto. Vengo principalmente de .Net Background y estoy buscando algo así como los eventos en .Net (C#)

Cualquier ayuda sería apreciada.

Respuesta

14

Como ya ha indicado, puede hacer exactamente lo mismo con el patrón editor-suscriptor/Observador. Solo requiere un poco más de trabajo de campo.

Y no, Java no tiene soporte nativo para eventos, como C# lo hace con delegados.

-1

Necesita hilos. La GUI en java tiene eventos, porque hay un hilo dedicado para que se envíen los eventos de IU. También hay algo llamado "Observer" y "Observable" (esta es la versión neutral del gusto de los oyentes del evento de la interfaz gráfica de usuario) pero es solo el patrón de diseño ...

1

Por lo que recuerdo de Java (haven ' trabajé con eso en> 6 meses), no creo que haya eventos ala .NET. Su mejor opción será hacer uso del patrón de editor/suscriptor. Es bastante fácil de implementar y bastante confiable.

0

Swing o AWT, que son los juegos de herramientas de la interfaz de usuario de Java, ambos manejan eventos; consulte el official Swing event tutorial para ver ejemplos. Deberá haber escrito su UI en Swing para poder registrar oyentes para estos eventos.

+0

no estoy trabajando con una interfaz de usuario por desgracia. –

+0

¿Esto significa que para cada evento en un objeto de oscilación particular existe un patrón observable? Eso parece mucho código redundante. Esto significaría un suscriptor/editor para cada evento. ¿No es posible simplemente tener una clase observable genérica y usar la composición para implementar el patrón observable? –

0

no estoy bien informado sobre C#, pero Java Beans que no son componentes de interfaz de usuario sin duda puede notificar a los oyentes sobre los cambios de estado usando Eventos:

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

Esto ha sido parte de los Java Beans Spec ya que primero salió. Tenga en cuenta la fecha en el tutorial: es vintage 2000.

El origen y el oyente deben estar ejecutándose en la misma JVM. Tendría que usar un proxy para comunicarse con algo que se ejecuta en otra JVM, pero podría hacerse.

Busqué en Google para el tutorial de eventos C# y encontré this. El registro de oyentes de Java y el lanzamiento de eventos cambiados a la propiedad fue una reminiscencia de lo que vi cuando revisé el tutorial de C#. ¿Me perdí algo importante? (Admitiré que no leí profundamente - no hay tiempo en este momento.)

0

No hay soporte nativo en Java - tendrá que implementar el Observer Pattern (también conocido como Subcribir/Publicar). Es bastante sencillo: no más de una docena de líneas de código.

4

El mecanismo Suscribir/Publicar propuesto por otros aquí le permitirá implementar eventos sincrónicos . Para bucles de eventos asíncronos (disparar y olvidar) Es posible que desee ver "actores". Un Actor<A> consiste en un controlador para mensajes (eventos) de tipo A, así como una estrategia de subprocesamiento para ejecutar el controlador. Esto le permite hacer concurrente, eventos asíncronos manejo como la siguiente:

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.

0

También puede ser que desee echar un vistazo a la biblioteca de código abierto EventBus, que, al contrario que el editor estándar/El patrón de suscriptor usa una clase de mediador (el bus de eventos) para reducir el estrecho acoplamiento requerido en el patrón de editor/suscriptor (donde los suscriptores deben saber que todos los editores deben registrarse, lo que no siempre es posible y suele ser engorroso).

Lo he usado en aplicaciones GUI pero puede ocuparse de cualquier tipo de evento.

Cuestiones relacionadas