Jbutton se queda bloqueado en un for
Hola, me gustaría consultarles como se puede hacer que un jbottom no se quede bloqueo mientras se corre un for o while.
Me explico mejor al dar clic en un botón y este tiene un "for" bastante largo el programa se me queda bloqueado y hace todas las rutinas que tiene pendiente hasta el final, ya sea poner texto en un textarea, todo lo hace al final, quisiera que se hiciera simultáneamente que se alla corriendo el proceso y se vallan realizando los cambios.
- Inicie sesión o regístrese para enviar comentarios
Threads
Necesitas un thread en segundo plano que corra los procesos que necesitas, así no se bloquea el thread principal que es el que actualmente se te bloquea.
, te dejo el tutorial de Oracle para concurrencia en swing en ésta liga.
Para swing, puedes usar el
Léelo, hazte un ejemplo, y si tienes alguna duda más puntual, ya la checamos.
Suerte!
Threads
nunca he hecho un Threads , no se si tengo que modificar el codigo actual o si tengo que crear una nueva clase, sera que me podrias dar un ejemplo sencillo de como se hace?
Una recomendación, invierte
Una recomendación, invierte tu tiempo leyendo.
En fin, ejemplos acá.
Una recomendación, invierte
Una recomendación sino ayudaras mejor ni hables... gracias ninguno de tus ejemplos sirvió pero lo conseguí por otro lado... Solo lo hice para probar si seguían apoyando de esta manera a quien tenia dudas pero este foro sigue siendo igual... así mejor ni pierdo mi tiempo haciendo consultas...
SwingWorker
Busca algo de documentación de la Swing worker thread. Swing usa un hilo (creo que el hilo principal de la aplicación) para pintar las pantallas y hacer todo lo relacionado con la GUI. Por lo tanto, es importante que cualquier cosa que vaya a tomar algo de tiempo se haga en otro hilo. Pero la sincronización es algo compleja, por lo que en Java 6 se introdujo una clase nueva SwingWorker, para facilitar la realización de tareas prolongadas en un hilo separado y que no se quede bloqueada la GUI.
Gracias
package SMSEngine;
public class Thread1 extends Thread
{
public Thread1()
{
super();
}
public void run()
{
SendMessage.uso = 1;
SendMessage.enviar();
}
}
Esta clase se usa para llamar al proceso en segundo plano llamando a clase de la siguiente manera new Thread1().start();
No se si es la forma correcta... pero Funciono :)
pues...
No es lo óptimo pero como dices, funciona.
La ventaja de SwingWorker es que te permite sincronizar entre el hilo principal y el hilo trabajador, por lo que puedes hacer cosas como avanzar una barra de progreso, ir poblando un JTable, cosas así.