Olá pessoal!
Estou há um bom tempo quebrando a cabeça nesse problema.
Tenho duas classes onde, a primeira é uma Interface e a segunda contém métodos. A primeira classe contém um progressbar
e um botão “Start”. Ao clicar no botão “Start”, um método da segunda classe é chamado para atualizar a progressbar. Mas não está atualizando… não sei mais o que fazer… já tentei usar Thread, Swingworker, um set normal…
Segue abaixo as Classes:
Classe Main (Interface)
private void jToggleButton1ActionPerformed(java.awt.event.ActionEvent evt) {
banco banco = new banco();
banco.teste();
}
public void set(int i) {
progress.setValue(i);
}
Classe Banco
public class banco {
Main main = new Main();
public void teste() {
for (int i = 1; i < 200000; i++) {
main.set(i);
System.out.println("Processo : " + i);
}
}
}
Informações:
Netbeans
Swing

O JProgressBar provavelmente não armazena o valor quando atualizado no laço, ou seja, ele sempre terá o valor 1, onde você deve pegar o valor atual dele e incrementar mais 1!
Tente fazer: progress.setValue(progress.getValue() + 1);
Bom dia Jonathan!
Mesmo pegando o valor atual da ProgressBar como você sugeriu, não funcionou…
Na verdade ele funciona, agora se você quiser ver ele atualizando passo a passo vai precisar utilizar Thread para realizar a tarefa.
2 curtidas
Coloquei um print na tela para verificar o valor da progressBar e conforme você disse, está funcionando mesmo. Mas mesmo incluindo uma chamada de Thread, não consigo visualizar o progresso…
Segue as imagens das classes e a evidência do ProgressBar sendo populado



Obs.: O máximo está setado como 100.
Não sei mais o que posso tentar pra funcionar…
Pra facilitar seu entendimento segue uma classe de exemplo que tenho guardada aqui, comentei alguns trechos do código para ficar fácil de entender.
package teste;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.ExecutionException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;
/**
*
* @author jhenrique
*/
public class ExemploJProgressBar extends JPanel {
JLabel resultLabel;
JProgressBar progressBar;
public ExemploJProgressBar() {
//Criação do ProgressBar
progressBar = new JProgressBar();
progressBar.setPreferredSize(new Dimension(150, 25));
progressBar.setStringPainted(true);
this.add(progressBar);
//Criação do Label
resultLabel = new JLabel("Resultado: Não iniciado");
resultLabel.setPreferredSize(new Dimension(250, 25));
this.add(resultLabel);
//Criação do botão
JButton button = new JButton("Iniciar");
button.setPreferredSize(new Dimension(75, 25));
this.add(button);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
iniciar();//inicia o processo de atualização do JProgressBar
}
});
}
private void iniciar() {
resultLabel.setText("Resultado: Em andamento...");
progressBar.setString("0%");
new SwingWorker<String, Integer>() {
@Override
protected String doInBackground() throws Exception {
for (int i = 0; i < 100; i++) {
atualizaProgressBar(i); //Método que atualiza o progresso de 1 em 1
Thread.sleep(100); //Delay na operação
}
atualizaProgressBar(100);
return "Concluido";
}
//Método que atualiza o jProgressBar
protected void atualizaProgressBar(int i) {
int value = i;//Recebe o valor incrementado que veio por parâmetro
progressBar.setValue(value);//Atualiza o progress
progressBar.setString(Integer.toString(value).concat("%"));//Atualiza a escrita do progress
}
@Override
protected void done() {
try {
finalizarProcesso(get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}.execute();
}
private void finalizarProcesso(String result) {
resultLabel.setText("Resultado: ".concat(result));
}
public static void main(String ... args) {
//Criação do frame
JFrame frame = new JFrame();
frame.setContentPane(new ExemploJProgressBar());
frame.setSize(500, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Na classe Banco você está criando outro objeto da classe Main, não está utilizando a instância existente que instanciou o Banco.
Ou seja, você tem dois objetos do tipo Main e está atualizando o progresso do objeto errado.