Boa tarde !!!
Pessoal preciso de uma ajudinha.
meu problema é o seguinte, fiz um programa onde ele vai gerar N quantidade de Registro.
e preciso que a cada registro, o contador seja atualiza em uma label.
exemplo 1.2.3.4.5… junto um barra de progresso, para que o usuário tenha um status em qual processo o programa está.
pois bem consegui fazer a barra de progresso e a label atualizar, Problema ela só faz quando o programa termina de gerar os registros.
segue o código se alguém souber e poder me ajudar a resolver esse problema fico grato.
Classe do Formulário Abaixo.
//Variavel de controle da thread do processo
private Thread processo;
/**
* Executa o processo da aplicação
*/
private void executaProcesso() {
if(processo==null) { //Instancia a thread SE não existir uma
processo = new Thread(new classeProcesso(this));
processo.start();
} else {
System.out.println("O processo ainda está em execução");
}
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
if(Fac.Modalidade()){
jComboBox1.setEnabled(false);
jComboBox2.setEnabled(false);
jComboBox3.setEnabled(false);
jComboBox4.setEnabled(false);
jTextField1.setEnabled(false);
jFormattedTextField1.setEnabled(false);
JFileChooser fileChooser = new JFileChooser("C:/Amarildo/Boleto"); // Força a Abrir em uma Pasta Determinada
fileChooser.showOpenDialog(tela); // Abri Chooser na Tela
File Arquivo_Entrada = fileChooser.getSelectedFile(); // Grava Arquivo Selecionado
jTextField1.setText(Arquivo_Entrada.getName().toUpperCase()); // Repassa Somente o Nome do arquivo Selecionado no Chooser Para Caixa de Texto Arquivo de Entrada
Config.setArquivo(Arquivo_Entrada.getName().toUpperCase());
if(Config.getArquivo() != null){
Dados.Zap(); // Limpa os Bancos Antes de Carregar
Dados.Append(Arquivo_Entrada); // Carrega O Banco Com os Dados
if(Config.getGera().equals("Produção")){Fac.Processa();}
Imprime.Spool(Config.getArquivo());
}
executaProcesso();
jLabel9.setText("Saida......:"+Util.Space(05)+Config.getArquivo());
jLabel13.setText("Contador...:"+Util.Space(05)+Config.getContador());
jLabel10.setText("Local.........:"+Util.Space(05)+Config.getLocal());
jLabel11.setText("Estadual...:"+Util.Space(05)+Config.getEstadual());
jLabel12.setText("Nacional...:"+Util.Space(05)+Config.getNacional());
}
} catch (SQLException ex) {
Logger.getLogger(Boleto.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Atualiza a tela
* @see java.util.Observer#update(java.util.Observable, java.lang.Object)
* @param o Objeto que sofreu uma atualização
* @param arg Argumento passado pelo objeto para seus observadores
*/
@Override
public void update(Observable o, Object arg) {
if(arg instanceof Integer) {
jProgressBar1.setValue(((Integer) arg));
jLabel13.setText("Contador...:"+Util.Space(2)+String.valueOf(((Integer) arg).intValue()));
} else if(arg instanceof Boolean) {
if( ((Boolean) arg) ) {
jProgressBar1.setValue(0);
jLabel14.setText("Processo finalizado!");
}
}
}
Classe Observador
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package Controller;
import java.util.Observable;
import java.util.Observer;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author JavaX_JavaX
*/
public class classeProcesso
extends Observable
implements Runnable {
/**
* Construtor que recebe um objeto que irá observa-lo
* @param observador Objeto que irá acompanhar as mudanças deste objeto
*/
public classeProcesso(Observer observador) {
//Adiciona o objeto observador a lista de observadores
addObserver(observador);
//...outras inicializações
}
/**
* Ponto de entrada da Thread.
* @see java.lang.Runnable#run()
*/
public void run() {
Configura Config = Configura.getInstance();
int i;
int Numero;
System.out.println("Verifica = "+Config.getContador());
for(i=0; i<= Integer.parseInt(Config.getContador()); i++) {
Numero = 100 * i / Integer.parseInt(Config.getContador()) + 1;
notifyObservers(Numero);
setChanged();
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(classeProcesso.class.getName()).log(Level.SEVERE, null, ex);
}
}
notifyObservers(true);
setChanged();
}
}
Classe Spool Onde os Registros são processados um a um
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Controller;
import Controller.Boleto.BoletoBancos;
import Controller.Boleto.GerarBoleto;
import Model.Banco;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
*
* @author Javax_javax
*/
public class Spool {
private ResultSet Eof;
private int sequencia, SeqX, SeqExt = 1, Ind1 = 1;
/**
Metodo para, Criar Spool de Impressão para Posicionamento de Variaveis <p>
1 Argumentos <p>
1º do tipo String <p>
Exemplo de Uso = Spool(String Arquivo); <p>
Retorno void <p>
* @param Arquivo
* @throws java.sql.SQLException
*/
public void Spool(String Arquivo) throws SQLException {
// Começo Conecta Banco de Dados em Run Time , Em tempo de Execução
final Banco conexao = new Banco(); //Estancia da Classe BancoDao Para Criar o Objeto Conexãoo
conexao.connect(); //Conexão com o Banco
// Começo Seleciona Banco de Dados ************************************
conexao.executeSQL_BdNavigator("Select * From App.Tipo01 Order By Cep Asc");// Seleciona o Banco de Dados Por Ordem de Cep
// Final Seleciona Banco de Dados *** *********************************
// Começo Criação de Variavel Eof ,com Resultado de um ResultSet ******
Eof = conexao.resultset; // Eof ou End Of File Enquando não for final de Arquivo
// Final Criação de Variavel Eof ,com Resultado de um ResultSet ******
Eof.last(); //-----\ Percorre Banco Até o Fim
int count = Eof.getRow(); //----- > count agora tem o numero de linhas do ResultSet
Eof.beforeFirst(); //-----/ volta o cursor la pra cima pra vc realizar suas tarefas. Como Um "Goto Top" No Banco
QtdeArqs = count/Quebra + 1; //----- > Retorna a Quantidade Total De Arquivos Que Serão Gerados
// Começo Deletar Aquivos Para Gerar Novos ********************************
for (int X = 1; X <= QtdeArqs; X++) { //-----\ Faz Até Atingir a Quantidade de Arquivos
Util.DeleteFile(Arquivo+"."+Util.Padl(Integer.toString(X),03,"0")); //----- > Deleta Os Arquivo para Gerar Novos Arquivos
Util.DeleteFile(Arquivo+Util.Padl(Integer.toString(X),03,"0")+".Pdf"); //----- > Deleta Os Arquivo para Gerar Novos Arquivos
} //-----/ Apenas se Os Arquivos já Existirem na Pasta
Util.DeleteFile(Arquivo+".OS"); //----- > Deleta Arquivo .Os Para Gera Novo Arquivo
// Final Deletar Aquivos Para Gerar Novos ********************************
while (Eof.next()) { // Eof ou End Of File Enquando não for final de Arquivo
sequencia++;
SeqX++;
} // Fim do While
Eof.close();
conexao.disconnect();
}
}