Eu tenho o seguinte problema…
uma tela, onde o usuário quando clica em executar… os botões são desabilitados,
e começa a encher uma barra de progresso…
só que quando o usuário clica em executar, a tela congela…
e, busquei no fórum, que a melhor forma é trabalhar com swingwork, só que…
eu vejo que eu terei necessidade de criar um para desabilitar /habilitar os botões…
e outro pra encher a barra de progresso, sem falar da 3ª thread, que executa o processo demorado…
O que me dizem?
No meu ponto de vista são só duas threads, uma que já está rodando e que ficaria a cargo de controlar a interface gráfica (botões e barra de progresso) e uma que seria iniciada ao clicar no botão, e que roda o processo demorado.
Minha duvida agora é a seguinte…
[code]public class Execucao extends SwingWorker<Object, String> {
@Override
protected Object doInBackground() {
try {
executa();
} catch (Exception ex) {
Logger.getLogger(Execucao.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}[/code]
quando na principal eu dou um
execucao.execute();
meu método de migrar é executado… porém, quando conclui e eu clico novamente em executar…
não acontece nada…
[quote=wilsontads]Minha duvida agora é a seguinte…
[code]public class Execucao extends SwingWorker<Object, String> {
@Override
protected Object doInBackground() {
try {
executa();
} catch (Exception ex) {
Logger.getLogger(Execucao.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}[/code]
quando na principal eu dou um
execucao.execute();
meu método de migrar é executado… porém, quando conclui e eu clico novamente em executar…
não acontece nada…[/quote]
SwingWorkers só podem ter seu método execute() chamado uma única vez. Se você deseja repetir a operação, precisa criar um novo objeto SwingWorker. Por exemplo, em vez de:
//algum lugar do seu código:
Execucao execucao = new Execucao();
//dentro do listener do botão "executar"
execucao.execute();
Voce deveria fazer o seguinte:
//dentro do listener do botão "executar"
Execucao execucao = new Execucao();
execucao.execute();
Entendeu?
Sim…, agora suponhamo-nos que esse meu método
executa();
recebe um parâmetro do tipo inteiro, como eu passaria utilizando swingwork?
[quote=wilsontads]Sim…, agora suponhamo-nos que esse meu método
executa();
recebe um parâmetro do tipo inteiro, como eu passaria utilizando swingwork?[/quote]
Você poderia recebê-lo no construtor do seu SwingWorker, ou através de um set mesmo, e usá-lo no método execute.
[code]
public class Execucao extends SwingWorker<Object, String> {
public int codigo = 1;
public Execucao(int codigo){
this.codigo = codigo;
}
@Override
protected Object doInBackground() {
try {
executa(codigo);
} catch (Exception ex) {
Logger.getLogger(Execucao.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
@Override
public void done() {
}
}[/code]
E no principal fazer algo do tipo
Execucao execucao = new Execucao(int codigo);
execucao.execute();
?
Correto.
Valeu man… =D
Na verdade, ainda surgiu um probleminha…
minha classe com swingwork, não está sendo executada no momento em que eu mando executar… =\
public void actionBtExecutar() {
try {
new ExecMigra(this,false).execute();
//Aqui acontece a interrupção
JTable tabela = (JTable) tblTabelas.getModel();
Por algum motivo, meu SwingWorker, não consegue chegar até o
@Override
protected Object doInBackground() throws Exception {
PbBtLgnd(obj);
return null;
}
e é interrompido … =\
Porque você não usa:
[code]
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
...
}
});[/code]
Esse ta sendo usando no meu JFrame…
só que no método btnExecutar,
new ExecMigra(this,false).execute();
ele vai pra minha classe ExecMigra, passa pelo construtor, e volta pro Jframe, antes de ir pro
doInBackground()
=(
[code]public ExecMigra(Lista lstbl,Boolean obj) throws Exception { //Passa aqui…
this.lstbls = lstbl;//Passa aqui…
this.obj = obj;//Passa aqui…
}//Passa aqui… e volta pra outra classe, antes de ir pro método abaixo…
@Override
protected Object doInBackground() throws Exception {
PbBtLgnd(obj);
return null;
}[/code]
Tentei run também…
aconteceu o mesmo =\
Alguém sabe me dizer?.. por que é interrompido, antes de ir pro doInBackground ?
=\