SwingWorker executado mais de uma vez

4 respostas
shinoob

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?

4 Respostas

fernandopaiva

Poste seu codigo entre as tags CODE para ver o q esta aprontando ae…SwingWorker não tem segredo.

shinoob

é ± 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

fernandopaiva

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

shinoob

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