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;
}
