2011-09-14 13 views
5

Il mio codice è:JFrame è caricato in ritardo

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" metodo ritorna dopo 30 secondi e fino a tornare, telaio non è installato correttamente, ma dopo che il metodo restituisce SolveIT, il telaio viene installato correttamente ma che cosa Voglio che prima di entrare nel metodo solveIt, la cornice dovrebbe essere correttamente sullo schermo. C'è qualche metodo che può aspettare l'installazione del frame e quindi chiama quel metodo solveIt?

risposta

2

Sembra che probabilmente stai facendo tutto questo sul thread dell'interfaccia utente. Non farlo - eseguire solveIt su un thread in background, chiamando nel thread dell'interfaccia utente utilizzando SwingUtilities se è necessario aggiornare/interrogare l'interfaccia utente. Fondamentalmente, non si dovrebbe fare un lavoro significativo nel thread dell'interfaccia utente - vedere lo Swing concurrency tutorial per ulteriori informazioni.

1

Dai un'occhiata alla classe SwingWorker. È usato per fare i processi in background senza fermare il frame da installare.

1

Utilizzare il thread di invio eventi per codice relativo alla GUI di breve durata. Le attività di lunga durata dovrebbero essere eseguite nelle proprie discussioni come proposto nelle altre risposte.

Poiché la gente mi ha scommesso. Vorrei solo completare i loro risposte con alcuni link interessanti:

Si noti che i due punti link a un po 'vecchio, ma relativa documentazione di JFC. Al giorno d'oggi SwingWorker è incluso nello standard API.

Cheers,