2012-02-07 13 views
19

Aprendí recientemente (en una clase basada en C#) que a veces se considera peligroso registrar oyentes de eventos en el constructor de un objeto, porque a dichos oyentes se les da una referencia antes de que el objeto se inicialice por completo, y podría (al menos en teoría) intentar acceder al objeto antes de que se complete la construcción.¿Debería preocuparme por filtrar el puntero "this" en Swing?

Por lo que entiendo, acceder a un objeto antes de que se complete la construcción puede causar un bloqueo, al menos en algunos idiomas ... si no causa un bloqueo, entonces solo nos preocuparía que el registro ocurra último, entonces nuestro objeto está listo para recibir eventos cuando registramos sus oyentes.

Ahora estoy comenzando con una nueva GUI de Swing, y noté que mi práctica estándar al compilar las GUI de Swing es conectar los oyentes de eventos en el constructor.

Parece improbable que los detectores de eventos de componentes Swing sean llamados antes de que el constructor esté completo, ya que presumiblemente no están cableados hasta que el componente se agrega a un contenedor Swing visible, lo cual solo puede ocurrir después de la construcción.

Entonces, ¿hay alguna razón real para evitar ese antipatrón cuando se trabaja en Swing? Y si es así, ¿cuál es la forma más sencilla de hacerlo?

Respuesta

2

Siempre que asigne los detectores de eventos en el subproceso de interfaz de usuario de lo que estará bien.

+0

¿No supone eso que los eventos se originarán en el hilo de la interfaz de usuario? Este será a menudo el caso, pero no está garantizado; puede haber eventos de temporizadores y fuentes de datos externas. – DNA

+0

No, pero supone que el hilo que asigna los detectores de eventos estará en el hilo de la interfaz de usuario. –

0

Ciertamente, los constructores en la programación Swing estándar de la industria a menudo son demasiado grandes y la herencia innecesaria. Mientras seas sensato y no patees nada (porque los eventos se disparen) antes de que se complete la construcción, deberías estar bien. (Y, obviamente, manténgase en AWT EDT).

Cuestiones relacionadas