Ver Mensaje Individual
  #11 (permalink)  
Antiguo 03/01/2012, 21:29
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: Hilos con Swing

Hola,

Cita:
Iniciado por pcarvajal Ver Mensaje
sabes? esto me sonó a que me hablaste en chino :S
la verdad no logré entender bien lo que me dijiste. ...

Je, je ... tienes toda la razón ... voy a intentar explicar mas detalladamente.

Cita:
Iniciado por pcarvajal Ver Mensaje
... que alternativa tengo entonces para hacer esto?
¿Que es lo que sucede?

Necesitas una aplicación que use dos hilos independientes al hilo principal de Swing para poner unos valores en un JTextField. Al hilo principal se le llama Event Dispatch Thread, es un hilo único donde se inicia la aplicación de Swing y solo el código que corre en ese hilo puede hacer uso de las funciones de Swing, dicho propiamente solamente ese hilo puede usar Swing.

¿Entonces no se puede usar?

Como Swing no es multithreading no puede ser usado desde otro hilo que no sea el Event Dispatch Thread, por lo que los diseñadores de Java crearon algunas herramientas para facilitar este procedimiento, como los Timers, o los SwingWorkers; con el inconveniente que solo se pueden usar para ejecutar procesos cortos.

Existe varios métodos para que se comuniquen dos hilos, uno de ellos es crear una clase que sea atómica, es decir que esté sincronizada para que dos hilos no puedan leer y escribir en la misma al mismo tiempo, uno de los hilos escribe en esa clase y ella guarda el valor. Otro hilo solamente lee de esa clase, así que un hilo guarda un valor en ese objeto y el otro hilo recupera el valor de ese objeto. Por último esa clase notifica con un evento (Listener) al que lee para que realice una actividad, como poner el valor leído en un JTextField.

¿Es el único método?

Existen muchas formas de hacer ese procedimiento, buscando por la red puedes encontrar varios ejemplos sobre 'swing multithreading', el anterior creo no es muy usado aunque es el que yo prefiero porque es difícil de implementar aunque mucho mas eficiente. Inclusive hay métodos que se comunican por programas externos como queues y sockets.

Saludos,

ps:

Si deseas puedo escribir un pequeño programa para demostrar el concepto, pero si realmente estas interesado que últimamente he estado algo ocupado. Aunque acá puedes encontrar un método simple pero diferente a lo que mencionaba : http://www.javaranch.com/journal/200...threading.html

Última edición por HackmanC; 03/01/2012 a las 21:41 Razón: link