Running Condition em Swing. Algum workaround?

2 respostas
ciczan

A treta é a seguinte.

Tenho uma aplicação Swing que faz umas operações em background, e enquanto isso mostra uma janela com uma barra de progresso para o usuário.

Mas o que acontece é que quando a operação em backgound acontece muito rapidamente às vezes a janela não fecha, fica cinza.

Todas as operações com swing estão sendo feitas na EDT. Como mandam as boas praticas.

Me parece ser algum bug mesmo. Estou usando Java 6, Linux/Gnome.

A parte boa é que consegui reproduzir o comportamento em um pequeno exemplo:

final JFrame teste = new JFrame("Teste");
        
        Runnable runInit = new Runnable() {
            public void run() {
                teste.add(new JLabel("olha eu aqui"));
                teste.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                teste.setLocationRelativeTo(null);
                teste.setSize(300, 300);
            }
        };
        SwingUtilities.invokeLater(runInit);
        
        Runnable runAbre = new Runnable() {
            public void run() {
                teste.setVisible(true);
            }
        };
        
        Runnable runFecha = new Runnable() {
            public void run() {
                teste.setVisible(false);
            }
        };
        
        for (int ii=0; ii<100; ii++) {
            SwingUtilities.invokeLater(runAbre);
            SwingUtilities.invokeLater(runFecha);
        }

2 Respostas

mister_m

Substitua invokeLater() por invokeAndWait().

ciczan

É BUG!!!

É BUG SIM!!!

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5109571

:cry:

Criado 29 de junho de 2007
Ultima resposta 29 de jun. de 2007
Respostas 2
Participantes 2