eu to usando o SwingWorker para nao travar a tela
mas qdo eu executo um SwingWorker ja criado , mais de uma vez, ele simplesmente nao executa , como resolver isso?
SwingWorker executado mais de uma vez
4 Respostas
Poste seu codigo entre as tags CODE para ver o q esta aprontando ae…SwingWorker não tem segredo.
é ± isso ai
final SampleAction a = new SampleAction<CTL>(getController(), BundleUtil.getCoreString(ResourceMessages.DEFAULT_ACTION_NEW)) {
@Override
protected void executeAction() throws Exception
{
super.executeAction();
getCtl().newAction();
}
};
//newButton.setRolloverIcon(Tools.cropImage(Theme.getImageIcon("all-active.png"), 16, 16, 3, 7));
newButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
a.execute();
}
});
essa SampleAction extende uma classe q extende o SwingWorker
public class SampleAction<CTL extends SampleCTL> extends DefaultAction
{
private CTL ctl;
private String description;
public SampleAction(CTL ctl, String description)
{
this.ctl = ctl;
this.description = description;
}
public CTL getCtl()
{
return ctl;
}
public SampleAction setCtl(CTL ctl)
{
this.ctl = ctl;
return this;
}
public String getDescription()
{
return description;
}
public SampleAction setDescription(String description)
{
this.description = description;
return this;
}
@Override
protected Void doInBackground() throws Exception
{
getCtl().setCurrentAction(this);
super.doInBackground();
getCtl().setCurrentAction(null);
return null;
}
}
public class DefaultAction extends SwingWorker<Void, Void>
{
@Override
protected Void doInBackground() throws Exception
{
executeAction();
return null;
}
protected void executeAction() throws Exception
{
}
}
se eu crio ele novamente e executo, funciona normalmente, assim:
newButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
new SampleAction<CTL>(getController(), BundleUtil.getCoreString(ResourceMessages.DEFAULT_ACTION_NEW)) {
@Override
protected void executeAction() throws Exception
{
super.executeAction();
getCtl().newAction();
}
}.execute();
}
});
mas se eu deixo o swing worker criado, ele nao executa, nao da erro, nem nada, so executa a primeira vez
bem, naum entendi muito o q vc quer naum, mas vamus la…
veja
//aqui meu worker
public void inserePermissoesWorker(){
//worker que insere as permissões do perfil no BD
SwingWorker w = new SwingWorker() {
@Override
protected Object doInBackground() throws Exception {
btnInserir1.setEnabled(false);
btnAlterar1.setEnabled(false);
btnSair1.setEnabled(false);
insereVinculaPerfilModuloPermissoes(); //chama metodo para inserção
return null;
}
protected void done(){
try {
btnInserir1.setEnabled(true);
btnAlterar1.setEnabled(true);
btnSair1.setEnabled(true);
progresso.setIndeterminate(false);
progresso.setValue(0);
//progresso.setVisible(false);
verificaPerfilPermissoes();
} catch (SQLException ex) {
Logger.getLogger(ModulosPermissoesForm.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
w.execute();
}
//aqui meu metodo para inserir
public void insereVinculaPerfilModuloPermissoes() throws SQLException{
//este metodo vincula o perfil ao módulo com as permissões
progresso.setMinimum(0);
progresso.setMaximum(gridPermissoesPorModulo.getRowCount());
Long idP = Long.parseLong(codPerfil.getText());
if(idP > 0){
ModulosPermissoesDAO mpDAO = new ModulosPermissoesDAO();
Yperfil perfil = new Yperfil();
perfil.setId(idP);
Yperfilmodulo pm = new Yperfilmodulo();
this.idControle = mpDAO.consultaIdControle();
pm.setIdControle(this.idControle);
for(int x = 0; x < gridPermissoesPorModulo.getRowCount(); x++){
Ymodulos modulos = new Ymodulos();
modulos.setId(Long.parseLong(gridPermissoesPorModulo.getValueAt(x, 0).toString()));
pm.setInserir((Boolean)gridPermissoesPorModulo.getValueAt(x, 2));
pm.setAlterar((Boolean)gridPermissoesPorModulo.getValueAt(x, 3));
pm.setConsultar((Boolean)gridPermissoesPorModulo.getValueAt(x, 4));
pm.setImprimir((Boolean)gridPermissoesPorModulo.getValueAt(x, 5));
pm.setModulo(modulos);
pm.setPerfil(perfil);
mpDAO.inserir(pm);
progresso.setValue(x);
}
}
}
//no botao para inserir eu apenas chamo o meu Worker, veja
private void btnInserir1ActionPerformed(java.awt.event.ActionEvent evt) {
inserePermissoesWorker();
}
eh isto, eu chamo 1 milhao de vezes e funciona blzinha.
t+ e boa sorte
funciona pq vc sempre cria antes de executar , mas se vc tentar executar ele novamente , com o objeto ja criado, ai nao executa
tipo, se vc armazenar esse w = new SwingWorker() em algum lugar e executar ele ja instanciado, + de uma vez, ele so executa 1 vez, é o q ocorre comigo
Criado 26 de setembro de 2011
Ultima resposta 26 de set. de 2011
Respostas 4
Participantes 2