while infinito en el main de un JFrame
hola :), en mi aplicaci贸n tengo un while infinito en el main de mi frame principal, con el while revizo el inicio de un evento, hacer esta revisi贸n en el main me permite ejecutar otros eventos, el problema es que la aplicacion queda muy lenta, alguien sabe como mejorar esto? muchas gracias por la atenci贸n :)
La aplicacion hace simulaciones, tengo 3 botones para iniciar, parar y terminar una simulacion, son simulaciones multiagente, usamos el Api Swarm
Sin el while en el main, al dar click en el boton iniciar en su actionPerformed se invocaban los metodos que realizan la simulacion pero el problema era que no podia dar click en los otros dos botones, hasta que terminaran los metodos invocados, entonces no se podia detener ni terminar la simulacion cuando el usuario lo deseaba.
Para tratar de solucionar esto usamos hilos que nos permitieran concurrencia pero siempre teniamos problemas con el Api, habian unos conflictos muy raros, asi que finalmente la unica solucion fue revisar en el main del frame constantemente dentro de un ciclo while si una variable boolean era verdadera. Cuando se da click en el boton de iniciar la variable se pone en verdadero y entonces, dentro del while, se llaman a los metodos que realizan la simulacion. De esta manera si es posible ejecutar los eventos de los otros dos botones para detener o terminar la simulacion
el codigo del main y del actionPerformed es el siguiente depronto asi puedes entender mas :), es corto, otra vez muchas gracias por tu atenci贸n
public static void main(String args[]) {
ctrlSimulacion=new CtrlSimulacion(args);
FrmPrincipal frmP=new FrmPrincipal();
frmP.show();
while(antesIniciar){
if(iniciar){
iniciar=false;
ctrlSimulacion.iniciar(frmTS,frmP);
}
}
}
private void jMenuItemIniciarActionPerformed(java.awt.event.ActionEvent evt) {
inciar=true;
}
Sin el while en el main, al dar click en el boton iniciar en su actionPerformed se invocaban los metodos que realizan la simulacion pero el problema era que no podia dar click en los otros dos botones, hasta que terminaran los metodos invocados, entonces no se podia detener ni terminar la simulacion cuando el usuario lo deseaba.
Para tratar de solucionar esto usamos hilos que nos permitieran concurrencia pero siempre teniamos problemas con el Api, habian unos conflictos muy raros, asi que finalmente la unica solucion fue revisar en el main del frame constantemente dentro de un ciclo while si una variable boolean era verdadera. Cuando se da click en el boton de iniciar la variable se pone en verdadero y entonces, dentro del while, se llaman a los metodos que realizan la simulacion. De esta manera si es posible ejecutar los eventos de los otros dos botones para detener o terminar la simulacion
el codigo del main y del actionPerformed es el siguiente depronto asi puedes entender mas :), es corto, otra vez muchas gracias por tu atenci贸n
public static void main(String args[]) {
ctrlSimulacion=new CtrlSimulacion(args);
FrmPrincipal frmP=new FrmPrincipal();
frmP.show();
while(antesIniciar){
if(iniciar){
iniciar=false;
ctrlSimulacion.iniciar(frmTS,frmP);
}
}
}
private void jMenuItemIniciarActionPerformed(java.awt.event.ActionEvent evt) {
inciar=true;
}