Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con Threads

Estas en el tema de Problema con Threads en el foro de Java en Foros del Web. Buenos Días a todos, Os pido ayuda con un tema relacionado con Threads. Tengo la siguiente estructura: Una Clase que es un JFrame y que ...
  #1 (permalink)  
Antiguo 02/04/2009, 01:18
 
Fecha de Ingreso: abril-2007
Mensajes: 40
Antigüedad: 17 años, 1 mes
Puntos: 0
Problema con Threads

Buenos Días a todos,

Os pido ayuda con un tema relacionado con Threads.

Tengo la siguiente estructura:

Una Clase que es un JFrame y que tiene un metodo publico para poder cargarle paneles JPanel desde otras clases.
Una clase que es el primer JPanel que se cargar en la clase de arriba y lo unico que tiene es un desplegable. Si se selecciona una opcion, entonces lo que hace es iniciar una clase (que es un Thread que se conecta con un servidor y recoge datos) y lugo cargar en la primera clase otra clase que es un JPanel y Thread . Esto es como una especie de asistente es decir que al arrancar la aplicacion me sale un desplegable y al elegir una opcion me salen otros datos.

El problema lo tengo al cargar la ultima clase especificada arriba ya que esa lo que realmente hace es mostrar un boton y una tabla y la tabla debe coger la información del Thread (iniciado por la segunda clase de arriba que se conectaba con un servidor y rellenaba una tabla). Entonces para que mi tabla JTable se rellene con la informacion del Thread que se conecta con el servidor y que lo aga cada segundo lo que he pensado en hacer es que al crear el JTable que llame a otra clase que pasandole el modelo de la tabla y que se encargue se esta operacion. Pero el problema es que si a esa clase intermedia no le pongo un bucle para que me actualize la tabla cada segundo entonces funciona, de lo contrario se queda atascado mi entorno grafico, es decir, mi panel con el JTable no carga.


Soy nuevo en la programacion en Java y creo que mi problema es uno de concepto, de diseño. ¿Que es lo que esta mal?

Un Saludo y gracias.
  #2 (permalink)  
Antiguo 02/04/2009, 10:43
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Problema con Threads

Hola:

Es complicado de entender lo que estás comentando.

Así, sin saber mucho el detalle de tu aplicación y quizás esté metiendo la pata, yo instanciaría en el principal un DefaultTableModel y se lo pasaría a todo el mundo: Al hilo que debe consultar datos y meterlos en el JTable, al JTable, al que tiene que actualizar el JTable, etc.

Si metes el DefaultTableModel en el JTable con su método setModel(), el JTable se actualizará automáticamente ante cualquier cambio de datos que se haga en el DefaultTableModel.

Los hilos no necesitan ver al JTable para nada. Unicamente pásales el DefaultTableModel y que metan en él los datos. Esto actualizará automáticamente el JTable.

Para evitar problemas de sincronismo entre hilos y teniendo en cuenta que los cambios en ese DefaultTableModel afectarán al JTable, yo haría las actualizaciones en un SwingUtilities.invokeLater()

Código:
// Aquí el código del hilo que tenga que rellenar datos en el modelo (DefaultTableModel)
// conseguir datos
SwingUtilities.invokeLater (new Runnable() {
   public void run() {
      modelo.addRow(....);
      modelo.setValueAt(....);
      // etc.
   }
});
Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 02/04/2009, 12:38
 
Fecha de Ingreso: abril-2007
Mensajes: 40
Antigüedad: 17 años, 1 mes
Puntos: 0
De acuerdo Respuesta: Problema con Threads

Hola chuidiang,

Primero queria darte las gracias por leer mi mensaje ya que al escribir tanto no mucha gente tiene ganas de leerlo.

Ya tengo resuelto el problema. Y era que mi clase que se encarga de actualizar el modelo del JTable no trabajaba como hilo aunque extendia de Thread y era porque mi codigo no estaba en el metodo run sino en el constructor y tampoco habia llamado al metodo start y entonces como yo le ponia un bucle pues nunca llegaba a cargar mi tabla porque se quedaba atascado en la creacion del hilo. Al hacer esto ya funciona perfectamente.


Con respecto al sincronismo de hilos me parece interesante y queria saber si conoces algun enlace con informacion sencilla sobre el tema. Aunque creo que en mi caso no hace falta porque la tabla solo tiene un hilo que actualiza su informacion y lo hace cada segundo.


Un saludo y gracias.
  #4 (permalink)  
Antiguo 02/04/2009, 13:57
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Problema con Threads

Hola:

Aquí tienes un enlace sobre sincronización de hilos en java. De todas formas, siempre que hay ventanas hay un hilo especial que se encarga del repintados de ventanas, así que en tu caso tienes al menos tres hilos: el del main, el que tú lanzas y el de las ventanas que lanza java.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:04.