Java - ayudo con hilos

 
Vista:

ayudo con hilos

Publicado por anxo (2 intervenciones) el 28/06/2007 02:51:33
Hola, por favor ayudedme con esto que quiero presenar mi proyecto de fin de carrera en julio y llevo días peleandome con lo siguiente:

Tengo una clase que ejecuta una computacion pesada y quise poner un ProgressMonitor, pero que sea pesada es la razon por la que no me muestra informacion el ProgressMonitor.

Consegui acercarme a la solucion usando un SwingWorker que me crea un hilo para la computacion pesada.
Para el ProgressMonitor creo una clase propia que mediante un timer mire por donde va de la computacion y lo indique.

El problema es que la clase que llama al SwingWorker debe esperar a que este termine para devolver su resultado, asi que pasa lo siguiente:

1) Ejecuta la funcion que debe devolver un resultado
1.1) Crea el Swingworker y este comienza a trabajar
1.2) Crea un ProgressMonitor con un timer que ira actualizandose
1.3) Devuelve el objeto construido por Swingworker, osea null porque no le dio tiempo

Probe a dormir a la clase original mientras no acaba el worker y da el resultado correcto pero NO actualiza el ProgressMonitor
Probe a hacer que el ProgressMonitor sea otro SwingWorker, pero en cuanto crea la clase monitor con su timer, ya no tiene mas codigo que ejecutar y se termina, por lo que no recive los eventos del timer. Pero si duermes al monitor ya no recive eventos.

Por favor ayuda, ya no se que probar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ayudo con hilos

Publicado por Gonzalo (180 intervenciones) el 28/06/2007 16:23:53
¿Cómo haces para "mirar por dónde va la computación"?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayudo con hilos

Publicado por anxo (2 intervenciones) el 28/06/2007 18:22:13
Pues hago una especie de "patron visitor", Hice una clase que se llama "TareaAnalisis" que hereda de SwingWorker. Una TareaAnalisis tiene asociado una clase "Estado" que tiene informacion de por donde va la computación.

Cree una clase "MonitorTarea" que contiene el timer y un ProgressMonitor y se crea pasandole una tarea que debe monitorizar:

MonitorTarea(TareaAnalisis tarea){
this.tarea=tarea;
timer = new Timer(TIEMPO, new TimerListener());
}


Dentro de "MonitorTarea" hay una funcion que abre el ProgressMonitor :


public void abrir(){
// Duerme hasta que se comience la tarea
while(!tarea.getEstado().iniciada()){
if (tarea.getEstado().finalizada()) return;
System.out.println("Aun no ha sido iniciada.");
java.lang.Thread.sleep(TIEMPO);
}

EstadoTarea estado = tarea.getEstado();
monitor = new ProgressMonitor(estado.getPadre() , estado.getTitulo(), estado.getTexto(), estado.getPasoInicial(), estado.getPasoFinal());
timer.start();

}


El timer comprobara el estado cada cierto tiempo, mirará si ha terminado o no, y actualizará el ProgressMonitor.

Saludo, y graciñas por la ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar