Swing congela enquanto sistema é executado

9 respostas
wilsontads
eu tenho o seguinte método:
SwingUtilities.invokeAndWait(new Runnable() {

                    @Override
                    public void run() {
                        try {
                            //download
                           //atualiza em % para o cliente

                        } catch (Exception e) {
                            MessageDialog.errorMessage("O teste falhou.\n" + e.getMessage(), "Erro");
                        }

                    }
                });

No entanto, enquanto o download é executado, a tela do cliente é congelada.

9 Respostas

L

Tenta usar o invokelater

wilsontads

Mesmo efeito…

drsmachado

Onde este trecho de código está inserido?

wilsontads

dentro do action de um button

drsmachado

Sério?
E o código, não posta por que?

wilsontads

é pouca coisa.. segue:

private void btnsalvarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        try {


            SwingUtilities.invokeLater(new Runnable() {

                @Override
                public void run() {
                    try {
					
					//download omitido

                    } catch (Exception e) {
                        MessageDialog.errorMessage("falha.\n" + e.getMessage(), "Erro");
                    }
                }
            });


        } catch (Exception e) {
            MessageDialog.errorMessage("falha.\n" + e.getMessage(), "Erro");
        }

    }
F

Utilize o SwingWorker.

gaulix

Eu estava com um problema na minha area de Log, quando eu executava meu programa, ele travava e só voltava quando tinha terminado de fazer tudo, a solução que eu encontrei foi fazer o log e a ação do meu botão com Threads(criei classes que estendem a classe Thread), não sei se foi a melhor coisa a se fazer, mas funcionou, agora minha janela não trava na ação do botão

P

Olá,

[color=orange]invoke[/color]And[color=red]Wait[/color] o próprio método diz: Invoque e espere.
Tais despachadores de eventos não tem como objetivo ser executados por muito tempo.

Para tal função use a classe Thread.
Darei como exemplo uma classe anônima por ser mais compacta.

new Thread() {
				public void run() {
					while(true) {
						
					}
				}
			}.start();

E dentro você poderia usar o invokeLater para despachar o evento para informar a porcentagem.
Espero que dê tudo certo.

Criado 12 de setembro de 2012
Ultima resposta 14 de set. de 2012
Respostas 9
Participantes 6