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. Tengo una clase que es una ventana, y en la que cuando pulsas un botón invoca a dos clases que he creado yo, así: public ...
  #1 (permalink)  
Antiguo 26/05/2006, 01:50
 
Fecha de Ingreso: mayo-2006
Mensajes: 3
Antigüedad: 18 años
Puntos: 0
problema con threads

Tengo una clase que es una ventana, y en la que cuando pulsas un botón invoca a dos clases que he creado yo, así:

public void jButton1_mouseClicked(MouseEvent e) {
try {
CLASE1.start();
CLASE2.start();
}
catch( bla bla bla)
{ bla bla bla }
}

Mi idea es que primero se ejecute el método de la clase 1 y cuando éste acabe que se ejecute el método de la clase 2. Pero el problema que tengo es que dentro del método CLASE1.start tengo definido un thread (es totalmente necesario) y cuando ejecuto el programa lanza el método CLASE1.start y cuando todavía no ha acabado se comienza a ejecutar CLASE2.start. En resumen, no sé como sincronizar la ejecución .

He estado mirando la clase thread y se que hay varios metodos: notify(), wait() etc.. pero por más que lo intento no consigo que se sincronice la ejecución.

¿Alguien podría decirme como tengo que notificar que la ejecución de CLASE1.start?

Gracias de antemano
  #2 (permalink)  
Antiguo 27/05/2006, 10:52
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
O haces que el thread de la clase 1 lanze el thread de la clase 2 al terminar, o le pasas una referencia del 1 al thread de la clase 2 y que el 2 espere con un "join": http://javaalmanac.com/egs/java.lang/IfStopped.html

El join no lo hagas en el metodo "mouseClicked" o bloquearas el thread del GUI y se bloqueara el programa.
  #3 (permalink)  
Antiguo 29/05/2006, 01:16
 
Fecha de Ingreso: mayo-2006
Mensajes: 3
Antigüedad: 18 años
Puntos: 0
Ante todo muchisimas gracias por responderme .
He seguido tus consejos y algo debo hacer mal porque el programa se me bloquea .

El codigo que he utilizado es este:

public void jButton1_mouseClicked(MouseEvent e) {
launch_classes();
}

public void launch_classes ()
{
try {
CLASE1.start();
//Wait indefinitely for the thread to finish
CLASE1.CLASE1_Thread.join;
CLASE2.start();
}
catch (Exception ex)
{
BLA BLA BLA
}
}

Y al ejecutar se queda bloqueado en el join, ¿Como podría hacerlo para que no se bloquee?

También lo he intentado haciendo un bucle para perder el tiempo (quizás es una barbaridad) y también se colgaba. El código es este:

while (CLASE1.CLASE1_Thread.isAlive())
{
}

A ver si podemos encontrar una solucion porque ya no se que probar
  #4 (permalink)  
Antiguo 29/05/2006, 04:04
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
El join no lo hagas en el metodo "mouseClicked" o bloquearas el thread del GUI y se bloqueara el programa.

Eso mismo queria decir . Aunque lo llames dentro de un metodo, sigues llamando al join desde el thread de jButton1_mouseClicked y por eso se bloque al programa.
Es el thread de la clase 2, el que tu quieres que se quede esperando por el thread de la clase 1, asi que es en el codigo de la clase 2 donde tienes que hacer el join.
  #5 (permalink)  
Antiguo 30/05/2006, 06:04
 
Fecha de Ingreso: mayo-2006
Mensajes: 3
Antigüedad: 18 años
Puntos: 0
Pensaba que llamandolo desde un método funcionaria .

Voy a tener que plantear mi programa de otra forma, gracias por todo
  #6 (permalink)  
Antiguo 15/09/2006, 06:39
 
Fecha de Ingreso: noviembre-2004
Mensajes: 12
Antigüedad: 19 años, 5 meses
Puntos: 0
En la CLASE2, pon wait() , y cuando la CLASE1 termine lo que quieras que haga, pon notify(), en un método sincronizado (synchronized).

Si tienes dudas dímelo.
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 23:40.