Boa Tarde Galera!
Estou usando jProgressBar + Observer.Porém não está funcionando perfeitamente.Quando informo os parametros necessarios, clico em importar, chama o metodo executaProcesso() na primeira vez é tranquilo a barra de progresso vai direitinho.
Porém se tentar importar novamente a barra não é iniciada.
Será que pelo fato do método executaProcesso() usar processo.start(); ele nao sai do “O processo ainda está em execução”
Estou usando o exemplo aqui do GUJ.
Obrigada.
[code]public class TelaPrincipal extends JFrame implements ItemListener,Observer{
public JProgressBar progressBar;
public static int TAM_PROCESSO = 1000000000;
private Thread processo;
public TelaPrincipal() {
super();
initialize();
}
public static void main(String[] args) {
new TelaPrincipal();
}
private void initialize() {
jLabelRC = new JLabel();
jLabelRC.setBounds(new Rectangle(15, 12, 28, 16));
jLabelRC.setText("RC:");
jLabelInserirDataTarifa = new JLabel();
jLabelInserirDataTarifa.setBounds(new Rectangle(204, 17, 72, 16));
jLabelInserirDataTarifa.setText("Data Tarifa:");
jLabelAtualizar = new JLabel();
jLabelAtualizar.setBounds(new Rectangle(508, 15, 109, 16));
jLabelAtualizar.setText("Fechar Vigência");
jLabelInserir = new JLabel();
jLabelInserir.setBounds(new Rectangle(402, 16, 83, 16));
jLabelInserir.setText("Abrir Vigência");
jLabelNomeArquivoEnviar = new JLabel();
jLabelNomeArquivoEnviar.setText("Nome do Arquivo:");
jLabelNomeArquivoEnviar.setBounds(new Rectangle(13, 58, 99, 16));
panel.setSize(648, 169);
panel.setLayout(null);
panel.add(jLabelNomeArquivoEnviar, null);
panel.add(getCaminhoArquivo(), null);
panel.add(getJProgressBar(), null);
panel.add(getImportar(), null);
panel.add(getJButtonExibirLog(), null);
panel.add(getJButtonRecuperarBackup(), null);
panel.add(getAbrir(), null);
panel.add(getJRadioButtonAtualizar(), null);
panel.add(getJComboBoxRCS(), null);
panel.add(getJRadioButtonInserir(), null);
panel.add(jLabelInserir, null);
panel.add(jLabelAtualizar, null);
panel.add(getJFormattedTextFieldDtTarifa(), null);
panel.add(jLabelInserirDataTarifa, null);
panel.add(jLabelRC, null);
panel.add(jRadioButtonAbrirVigencia, null);
panel.add(jRadioButtonFecharVigencia, null);
panel.setLayout(new BorderLayout());
panel.setBorder(BorderFactory.createEmptyBorder(80, 570, 100, 80));
ButtonGroup radios = new ButtonGroup();
radios.add(jRadioButtonAbrirVigencia);
radios.add(jRadioButtonFecharVigencia);
jRadioButtonAbrirVigencia.setSelected(true);
botaoSelecionarArquivo.setIcon(new ImageIcon(getClass().getResource(Campos.IMG_ABRIR)));
botaoImportar.setIcon(new ImageIcon(getClass().getResource(Campos.IMG_ENVIAR)));
//botaoCancelar.setIcon(new ImageIcon(getClass().getResource(Campos.IMG_SAIR)));
botaoExibirLog.setIcon(new ImageIcon(getClass().getResource(Campos.IMG_DETALHES)));
getJFrame();
botaoImportar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent evt) {
progressBar.setValue(0);
if(validaCampos() == true){
Workbook workbook;
importacaoBOImpl.updateTempComodatoc(dataIniVigMenos1,dataTarifa2,listaTempComodatocVO);//fecha
importacaoBOImpl.insertTempComodatoc(listaTempComodatocVO);//abre
executaProcesso();
/**
* This method initializes jProgressBar
*
* @return javax.swing.JProgressBar
*/
public JProgressBar getJProgressBar() {
if (progressBar == null) {
progressBar = new JProgressBar();
progressBar.setMaximum(TAM_PROCESSO);
progressBar.setStringPainted(true);
progressBar.setBounds(new Rectangle(17, 92, 620, 14));
pack();
}
return progressBar;
}
/**
* Executa o processo da aplicação
* @throws SQLException
* @throws AplicacaoException
* @throws InterruptedException
*/
private void executaProcesso() throws AplicacaoException, SQLException, InterruptedException {
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");
}
}
/**
* 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
*/
public void update(Observable o, Object arg) {
if(arg instanceof Integer) {
getJProgressBar().setValue(((Integer) arg).intValue());
} else if(arg instanceof Boolean) {
//if( ((Boolean) arg).booleanValue() ) {
getJProgressBar().setValue(1000);
JOptionPane.showMessageDialog(null, "Processo de importação concluído com sucesso!", "Importação", JOptionPane.INFORMATION_MESSAGE);
//}
}}
[code]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() {
int i;
for(i=0; i<= TelaPrincipal.TAM_PROCESSO; i++) {
//Notifica o processamento a cada 10 iterações
if((i % 10 == 0)) {
notifyObservers(new Integer(i));
setChanged();
}
}
//Notifica fim do processo
notifyObservers(new Boolean(true));
setChanged();
}
[/code]
} // @jve:decl-index=0:visual-constraint=“5,9”
[/code]