L'interfaccia utente di Swing Java non si sta aggiornando/ridipingendo come pensavo. L'app invia un messaggio XMPP e riceve una risposta su un thread diverso. Tale risposta viene elaborata e l'interfaccia utente viene aggiornata per riflettere le informazioni contenute nel messaggio.Interfaccia utente Swing non aggiornata dopo l'utilizzo di invokeLater
Quando si riceve la risposta, aggiorno un componente JPanel utilizzando
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() { /* execute logic to update panel */ }
});
E 'stato abbastanza un momento da quando ho sviluppato in Java, ma in base alla mia ricerca invokeLater linea accoda il eseguibile per l'esecuzione del Thread GUI. Tuttavia, la mia GUI non si aggiorna finché non faccio qualcos'altro nell'app che causa un ridisegno, come il ridimensionamento della finestra. Cosa mi manca? Dopo la logica per l'aggiornamento del pannello, ho provato varie combinazioni di invalidate() e repaint(), ma il risultato è sempre lo stesso - la GUI non si aggiorna fino a quando, ad esempio, non ridimensiono la finestra.
MODIFICA: Quando dico di aggiornare il pannello, in particolare sto facendo un removeAll() e poi aggiungo una manciata di JLabels.
Vorrei aggiornarlo, migliaia di volte. – JCasso