Duvida SwingWorker

2 respostas
fabioebner

Pessoal tenho o seguinte codigo:

if (evt.getStateChange() != ItemEvent.DESELECTED) {
        if(jcbTelasModulo.getSelectedIndex() > 0){
        final TelaObj tela = (TelaObj) this.jcbTelasModulo.getSelectedItem();
        tela.addPropertyChangeListener(new PropertyChangeListener() {

                public void propertyChange(PropertyChangeEvent pce) {
                    if("state".equals(pce.getPropertyName())){
                        if(TelaObj.StateValue.DONE.equals(pce.getNewValue())){
                            jdlAtualizandoTela.dispose();
                            setComponetesTabela(tela.getComponentesTela());// TODO add your handling code here:
                        }
                    }
                }
            });
            
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        jdlAtualizandoTela.setBounds((screenSize.width - 445) / 2, (screenSize.height - 100) / 2, 445, 100);
        jpbVerificando.setIndeterminate(true);
        //tela.verificaAtualizacaoTela();
        tela.execute();
        jdlAtualizandoTela.setVisible(true);

        }

e estou com um problema.. qdo eu chamo isso pela primeira vez ele executa normalmente, porem qdo eu chamo pela segunda vez ele trava.. alguem sabe me explicar o pq?? eu tenho q cancelar a o swingWorker antes de chama-lo novamente?? e o estranho e q eu tenho um combo com dois itens.. qdo eu clico no primeiro item ele faz normal, no segundo tbm.. so trava qdo eu clico no mesmo item pela segunda vez..

obrigado

2 Respostas

davidbuzatto

O doInBackground faz UMA coisa por vez. Não adianta vc colocar um loop infinito dentro do método pq não vai adiantar (ele precisa de um retorno).
Vc pode a cada evento criar uma nova thread passando uma nova instância do seu SwingWorker e iniciar a mesma. Se mesmo assim vc precisa de algo que atualize a interface indefinidamente, recomendo que vc implemente uma thread que faça a atualização e a execute usando o SwingUtilities.invokeLater.

davidbuzatto

Seria legal dar uma olhada na documentação do SwingWorker para entender o funcionamento…

Criado 1 de julho de 2008
Ultima resposta 1 de jul. de 2008
Respostas 2
Participantes 2