Olá, tenho uma aplicação java (utilizando IDE netBeans) e nela, quando eu crio uma entidade do tipo “processo” automaticamente, cria diversas entidades do tipo “cartão ponto”, 1 cartão para cada data, isso depende de campos do processo (data de inicio e data de fim) ou seja, existe 1 cartão ponto para cada dia entre data de inicio e data de fim, independente da diferença em dias entre as duas, mas terá uma máscara limitando para 5 anos, o meu problema é: quando eu insiro o processo, inicia um for que percorre as datas e vai adicionando cartões ponto, como há um delay na conexão entre o bd e a aplicação, demora um tempo para isso terminar, enquanto isso ocorre, o botão fica pressionado e dá a impressão que o sistema travou.
tive a ideia entao de inserir uma JProgressBar em uma espécie de JDialog, mas todos os exemplos que eu achei, a barra é dependente de uma thread e, eu precisava que fosse dependente apenas do “for”, alguém sabe uma maneira de fazer isso?
segue o código do botão que adiciona (está funcionando perfeitamente, é apenas para terem uma base):
btAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
StringTools stT = new StringTools();
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Processo p = new Processo();
boolean b = false;
for (Processo g : cPro.getList()) {
if (g.getNprocesso().equals(tfNumeroProcess.getText())) {
b = true;
}
}
if (b) {
JOptionPane.showMessageDialog(null, "Já existe um processo com esse número!");
} else {
for (Reclamado r : lRecl) {
if (r.getNomeReclamado().trim().equals((String) cbRecl.getSelectedItem())) {
p.setReclamadoIdReclamado(r);
}
}
for (Coloutroindices c : lCol) {
if (c.getNomeColoutroindices().trim().equals((String) cbTabela.getSelectedItem())) {
p.setColoutroindicesIdColoutroindices(c);
}
}
p.setIdProcesso(cPro.getNextId());
p.setNprocesso(tfNumeroProcess.getText());
p.setAdmissaoProcesso(sdf.parse(tfDatAdmiss.getText()));
p.setAjuizamentoProcesso(sdf.parse(tfDatAjuiz.getText()));
p.setCalculoProcesso(sdf.parse(tfDatCalc.getText()));
p.setCorrecaoProcesso(String.valueOf(cPro.setCor(rbCorrThis.isSelected(), rbCorrThat.isSelected())));
p.setDemissaoProcesso(sdf.parse(tfDatDemiss.getText()));
p.setDepvinculadaProcesso(cPro.setDep(chbFgtsDep.isSelected()));
p.setFgtsProcesso(tfFgts.getText());
p.setInssProcesso(String.valueOf(cPro.setInss(rbInssMes.isSelected(), rbInssTot.isSelected(), rbInssNoCalc.isSelected())));
p.setIrrfProcesso(String.valueOf(cPro.setIrrf(rbIrrfMes.isSelected(), rbIrrfTot.isSelected(), rbIrrfIn.isSelected(), rbIrrfNoCalc.isSelected())));
p.setJurosProcesso(String.valueOf(cPro.setJuros(rbJurosDia.isSelected(), rbJurosMes.isSelected())));
p.setLiberacaoProcesso(sdf.parse(tfDatLib.getText()));
String par = "";
for (int i : cPro.setParametros(chbParamRef.isSelected(), chbParamCalc.isSelected(), chbParamDsr.isSelected())) {
par += String.valueOf(i) + ",";
}
p.setParametrosProcesso(par);
p.setPrazoProcesso(sdf.parse(tfDatPraz.getText()));
p.setPrescricaoProcesso(sdf.parse(tfDatPresc.getText()));
p.setReclamanteProcesso(tfReclamante.getText());
p.setStatusProcesso(String.valueOf(cPro.setSta(rbStaAfz.isSelected(), rbStaEm.isSelected(), rbStaConc.isSelected(), rbStaEntr.isSelected())));
if (cPro.addPro(p)) {
try {
Calendar dateAdm = Calendar.getInstance();
dateAdm.setTime(sdf.parse(tfDatAdmiss.getText()));
Calendar dateDem = Calendar.getInstance();
dateDem.setTime(sdf.parse(tfDatDemiss.getText()));
// int dias = dateDem.get(Calendar.DAY_OF_YEAR) - dateAdm.get(Calendar.DAY_OF_YEAR);
int dias=stT.dataDiff(sdf.parse(tfDatAdmiss.getText()),sdf.parse(tfDatDemiss.getText()));
System.out.println(dias);
for (int i = 0; i < dias; i++) {
Cartaoponto card = new Cartaoponto();
card.setIdCartaoponto(cCard.getNextId());
card.setDataCartaoponto(sdf.parse(cCard.somaData(tfDatAdmiss.getText(),i)));
card.setEntradasCartaoponto(" : = : = : = : = : ");
card.setSaidasCartaoponto(" : = : = : = : = : ");
card.setFolgaCartaoponto(cCard.isFer(p.getReclamadoIdReclamado().getCidadeReclamado(),tfDatAdmiss.getText(),i));
card.setNcolCartaoponto("5");
card.setProcessoIdProcesso(p);
card.setTotalCartaoponto(" : ");
cCard.insert(card);//aqui estou inserindo o cartão ponto;
//dentro desse for eu queria colocar o JProgressBar
}
} catch (Exception E) {
JOptionPane.showMessageDialog(null, "Ímpossível criar Cartão Ponto para esse Processo!");
E.printStackTrace();
}
JOptionPane.showMessageDialog(null, "Seu Processo e o respectivo Cartão Ponto foram cadastrados com sucesso!");
} else {
JOptionPane.showMessageDialog(null, "Não foi possível cadastrar o processo!");
}
}
} catch (Exception E) {
E.printStackTrace();
JOptionPane.showMessageDialog(null, "Não foi possível inserir o processo!");
}
}
});