Swing invokelater congelamento
-
29-10-2019 - |
Pergunta
Estou chamando invokeLater diretamente do botão em actionPerformed com este código:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
int temp = (jComboBox1.getSelectedIndex() + 1);
heavyProccesingFunction();
}
});
}
e isso ainda congela a GUI.Porque?Obtenho o mesmo resultado sem usar a função invokelater.
devo usar
Thread queryThread = new Thread() {
public void run() {
em vez disso?
Editar:
Obrigado, um novo tópico deve ser usado.
Solução
invokeLater
ainda acaba executando o código no thread do despachante - logo mais tarde.O objetivo de invokeLater
é permitir que threads de background postem trabalho no thread do dispatcher de eventos.
Parece que você realmente deve criar outro thread - ou usar um pool de threads para o mesmo tipo de efeito, ou SwingWorker
por exemplo.Faça o que fizer, você precisa evitar executar seu método lento no thread do dispatcher de eventos.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow