2011-09-14 9 views
5

Mi código es:JFrame se carga finales

solveDb_userfileInconsistency solve = new solveDb_userfileInconsistency(); 
    solve.setVisible(true); 

    try { 
     solve.solveIt(); 
    } catch (InstantiationException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClassNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

"SolveIT" método devuelve después de 30 segundos y hasta que vuelve, el marco no está instalado correctamente, pero después devuelve el método SolveIT, el marco se instala correctamente, pero lo Lo que quiero es que antes de entrar en el método de resolver, el marco debe estar correctamente en la pantalla. ¿Hay algún método que pueda esperar la instalación del marco y luego llame a ese método solveIt?

Respuesta

2

Parece que probablemente esté haciendo todo esto en el hilo de la interfaz de usuario. No hagas eso: haz que solveIt se ejecute en un hilo de fondo, invocando el hilo de UI usando SwingUtilities si necesita actualizar/consultar la UI. Básicamente, no debe hacer un trabajo importante en el hilo de la interfaz de usuario: consulte el Swing concurrency tutorial para obtener más información.

1

Eche un vistazo a SwingWorker Class. Se utiliza para realizar los procesos en segundo plano sin detener la instalación del marco.

1

Utilice la secuencia de envío de eventos para el código relacionado con la GUI de corta duración. Las tareas de ejecución prolongada deberían ejecutarse en sus propios hilos según lo propuesto en las otras respuestas.

Dado que la gente me lo apostó. Me dejaron de complementar sus respuestas con algunos enlaces interesantes:

Tenga en cuenta que los dos puntos de enlaces a un poco viejo pero relevante documentación de JFC. Hoy en día SwingWorker está incluido en la Norma API.

Cheers,