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
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!!!
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
Diego_Pangone
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.
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
e se mesmo assim não funcionar tente usar o invokeAndWait() no lugar de invokeLater()…
D
Diego_Pangone
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
Diego_Pangone
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