Ajuda com SwingWorker

10 respostas
D

e aew galera blz!!!!!

alguem pelo amoe de Deus pode me dar uma ajuda com a classe SwingWorker
é o seguinte eu to desenvolvendo uma aplicação e preciso fazer o backup da minha base de dados pelo sistema , e to usando a seguinte código

barraProcesso.setIndeterminate(true);
        worker = new SwingWorker(){
         
            public void finished() {
                     barraProcesso.setIndeterminate(false);
                    JOptionPane.showMessageDialog(null,"Terminou");                  
            }
         
            public Object construct() {
              
                try{
                    new DBackupBancoPostgres("127.0.0.1","postgres",diretorioBackup +"\\panificadora.backup" ,"panificadora");
                }catch(Exception ex){
                   JOptionPane.showMessageDialog(null,ex);
                }
                return null;
            }
        };
                 
        worker.start();

o que acontece é que a minha barraProcesso que é uma JProgressBar não esta correndo a barrinha , ela fica parada e não c move , e tambem c eu executo uma vez essa rotina , a msg "Terninou" espera que o processo do backup termine pra depois ela ser mostrada na tela , mais c eu executo outra vez a rotina de backup a msg não espera a execução pra ser mostrada ....

eu ficarei muito grato com quem puder me ajudar ..
desde ja muito o brigado!!!

10 Respostas

ciczan

Eu usei o SwingWork faz muito tempo, e lebro de ter tido algum problema com progressBar mesmo. Agora não lembro mais nem dos métodos dela. Tem certeza que o serviço precisa ficar no método construct ? Acho que essa versão já utiliza a API de concorrência nova do Java5, porque o método pode retornar algo no fim.

Atualmente faço esse trabalho sem o swingWork mesmo. Você pode tentar algo do tipo

Runnable run = new Runnable() { public void run() { try{ new DBackupBancoPostgres(...); }catch(Exception ex){ JOptionPane.showMessageDialog(null,ex); } //Chama na thread do swing SwingUtilities.invokeLater(new Runnable() { barraProcesso.setIndeterminate(false); JOptionPane.showMessageDialog(null,"Terminou"); }); } }; new Thread(run).start();

Um pouco mais sujo, mas é menos “caixa-preta”. Seria bom colocar o JOptionPane.showMessageDialog(null,ex); para a thread do swing tb, mas não coloquei por clareza.

Depois avisa se funcionou.

ciczan

Outra coisa que lembrei agora é você colocar um bloco finally que esconda a progressBar para o caso do sql não funcionar.

D

ciczan blz

olha só esse código que vc passou aew não ta fncionando aqui, ele nem compila ta dando erro nessa parte aqui

//Chama na thread do swing SwingUtilities.invokeLater(new Runnable() { barraProcesso.setIndeterminate(false); JOptionPane.showMessageDialog(null,"Terminou"); });

ciczan

OK, mas qual é o erro? Em qual linha ?

Você colocou o import do SwingUtilities ?
O atributo barraProcesso é visível? Se for dentro do método precisa ser final.

ciczan

Ops, agora vi o erro. Faz assim:

SwingUtilities.invokeLater(new Runnable() { public void run() { barraProcesso.setIndeterminate(false); JOptionPane.showMessageDialog(null,"Terminou"); } });

D

eu conssegui arrumar , mais não adiantou nd … mew isso é do bozo heim

o que ta acontecendo é o seguinte, eu preciso rodar o tempo que leva pra fazer o backup junto com a barra do JProgressBar e quando terminar o backup eu dar a msg “Processo concluido” e coisa e tal , mais não to consseguindo de jeito nem um…

ciczan me de uma luz pelo amor de Deus … uaiuahua
olha o desespero

ciczan

Outra dica que posso te dar é colocar o teu código gráfico na Thread do Swing. Tipo, no começo do teu codigo tem

barraProcesso.setIndeterminate(true);

faça:

SwingUtilities.invokeLater(new Runnable() {
             public void run() {
                 barraProcesso.setIndeterminate(false);
                 JOptionPane.showMessageDialog(null,"Terminou");
             }
         });

e se mesmo assim não funcionar tente usar o invokeAndWait() no lugar de invokeLater()…

D

afff nd… não adiantou nada , o máximo que eu conssegui é fazer com que o o processo do backup e a barra de carregamento trabalhem juntos , mais não conssegui fazer com que após ter terminado o processo dispare a msg de término … quando eu clico no botão pra fazer o backup , no mesmo momento dispara a msg determino sem ao menos ter terminado…

ciczan

Então o mais difícil já foi feito.

Agora vc tem que debugar e ver se o processo de backup tá funcionando e demorando tudo isso mesmo.

Verifique novamento se o código que diz que terminou está dentro do runnable que chama o backup. Se estão na mesma Thread não há porque um ocorrer antes do outro.

D

fera valew mesmo , sua ajuda foi de extrema importancia , muito obrigado
e desculpa eu encher o saco , é que to iniciando agora , e to muito fominha , quero aprender tudo de uma vez , acho que não é bem por aew …
bom mais uma vez muitooo obrigado

Criado 20 de outubro de 2006
Ultima resposta 20 de out. de 2006
Respostas 10
Participantes 2