Estructura de datos

Solo disponible en BuenasTareas
  • Páginas : 5 (1066 palabras )
  • Descarga(s) : 0
  • Publicado : 19 de octubre de 2010
Leer documento completo
Vista previa del texto
Clase 35 Aprendizaje activo: Uso de hilos para crear una animación

Hilos y Swing
Todos los programas de Java ejecutan, al menos, tres hilos: 1. 2. el hilo main(); es decir, el hilo que comienza con el método main; el hilo de eventos, con el que el sistema de ventanas notifica sobre los eventos en los que se ha registrado y





3. el hilo del recolector de basura. El hilo delrecolector de basura se ejecuta en segundo plano (con prioridad menor) y uno puede olvidarse incluso de que está ahí. Pero, tan pronto como coloquemos una interfaz gráfica de usuario, deberemos tener en cuenta el hilo de eventos.
2

1

JFileViewer
• Si el programa crea una GUI, pero luego únicamente reacciona ante los eventos de entrada del usuario, realmente intercambiará un hilo por otro. Pero sicrea una GUI y la actualiza desde el hilo de main, deberá tener más cuidado. Pongamos un ejemplo sencillo. En la clase 30, donde hablábamos de los flujos, analizamos un ejemplo llamado JFileViewer que leía archivos de texto y los mostraba en una clase llamada JTextViewer. Tal como lo hicimos, se leía todo el archivo de texto y, después, el texto resultante pasaba a ser el contenido deJTextViewer.
3

• •



JFileViewer (revisado)
• Un enfoque más interesante habría supuesto colocar la interfaz y comenzar a leer el archivo, mostrando el nuevo texto a medida que se leía en el disco. • El problema con este enfoque era que implicaba la modificación (la llamada a los métodos) de objetos en la GUI desde un hilo distinto al de eventos.

4

2

Hilos y el AWT
• El paquete de GUIinicial de Java, el AWT, sincronizaba varios métodos en las clases de programación. Pero hacía que las clases del AWT estuviesen expuestas a interbloqueos. Cuando los programadores de Java se plantearon implementar capacidades mucho más complejas de Swing, de hecho, abandonaron. El AWT intenta ser multihilo, esto es, permitir la llamada a clases desde varios hilos.





5

Hilos y Swing• Dejando a un lado poquísimas excepciones, las clases de Swing esperan que sus métodos se llamen únicamente desde el hilo de eventos. Tal como describen los desarrolladores de Java: "Una vez que un componente de Swing se detecta, todo el código que afecte al estado de dicho componente o dependa de él debe ejecutarse en el hilo de entrega de eventos."

6

3

Hilos y Swing, 2
Un componente sedetecta cuando el sistema de ventanas lo asocia a una ventana que realmente lo muestra en pantalla. • Esto suele ocurrir cuando el componente se hace visible por primera vez o cuando se le otorga un tamaño preciso por primera vez (mediante la llamada a pack(), por ejemplo). • Hasta ese momento, se puede modificar desde cualquier otro hilo como el hilo principal, ya que no hay posibilidad de quese pueda acceder a él desde el hilo de eventos hasta que el sistema de ventanas no lo detecte. • Así, puede agregar componentes (add()) al contenedor desde el hilo principal o agregar texto a un JTextArea, siempre y cuando no sea detectado.
7



Hilos y Swing, 3
• Ahora bien, una vez que se hace visible, puede aceptar clics del ratón o pulsaciones de teclas, o cualquier otro tipo de evento ypueden utilizarse los métodos de llamada correspondientes. • Swing NO sincroniza estos métodos ni los métodos a los que pueden llamar, como setText() o add(). • Si quiere llamar a setText() o a métodos similares desde cualquier otro hilo que no sea el de eventos, deberá utilizar una técnica especial.
8

4

Modificar una GUI desde otro hilo
• Básicamente, se crea un objeto que describa latarea que se debe realizar en el hilo de eventos a una hora determinada. • A continuación, se pasa dicha tarea al hilo de eventos mediante un método sincronizador que la pone en cola con el resto de eventos en la cola de eventos del hilo de eventos. • Swing ejecutará la tarea cuando quiera hacerlo, ya que Swing sólo procesa un evento cada vez, incluidas estas tareas especiales que pueden llamar...
tracking img