Problemas com JProgressBar

Ola pessoal, sou novo por aqui… e estou com um problema com o JProgressBar.
É a primeira vez que uso e pesquisei bastante e não estou entendendo o que esta ocorrendo.

O que eu quero fazer é simples, quando o usuario clicar no botão salvar da interface o meu sistema executa comandos sql que é muito demorado e eu quero que apareça uma JProgressBar que simplesmente “finge” para que o usuario nao pense que travou.

só que esta acontecendo o seguinte:
quando o usuario clicar no botão salvar, é criado o objeto da classe que cria o JprogressBar e dou o setVisble(true) só que nao executa o comando da linha de baixo que é o codigo demorado.
somente se o usuario fechar o JProgressBar é que é executado a linha de baixo

essa é a classe que cria o JProgressBar

public class Progress extends JDialog {

    private JProgressBar progressBar;

    public Progress(TelaMatriculaCadastroAlunos parent, boolean modal) {
        super(parent, modal);
        setSize(400, 80);
        this.setResizable(false);
        this.setLocationRelativeTo(null);
        setContentPane(getProgressBar());
    }

    public void setMensagem(String msg) {
        progressBar.setString(msg);
    }

    private Container getProgressBar() {
        progressBar = new JProgressBar();
        progressBar.setIndeterminate(true);
        progressBar.setStringPainted(true);
        return progressBar;
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                Progress progre = new Progress(null, true);
                progre.setVisible(true);
            }
        });
    }
}

e esse aqui é o comando que esta no Action do botão Salvar

Progress p = new Progress(this, true);
        p.setMensagem("SALVANDO... AGUARDE");
        p.setVisible(true);
        atualizarTabelaAlunosDaTurma(idTurma); // só executa se fechar a tela do JProgressBar
        p.dispose();

alguem poderia me ajudar, não sei o que esta de errado

    atualizarTabelaAlunosDaTurma(idTurma); tem de ser executado em uma thread que não é a mesma do Swing. Se ele for executado na mesma thread, a repintura da tela será congelada e o progress bar não funcionará como desejado.

Entendi, vou fazer aqui e qualquer duvida se deu certou ou não eu informo, a momento obrigado!

entanglement não sei se estou fazendo errado mais continua da mesma forma. olha como ficou meu codigo

Classe que cria o JProgressBar

public class Progress extends JDialog {

    private JProgressBar progressBar;
    private TelaMatriculaCadastroAlunos telaMatricula;

    public Progress(TelaMatriculaCadastroAlunos parent, boolean modal) {
        super(parent, modal);
        telaMatricula = parent;
        setSize(400, 80);
        this.setResizable(false);
        this.setLocationRelativeTo(null);
        setContentPane(getProgressBar());
        Thread t = new Thread(new ProgressRunnable());
        t.run();
    }

    public void setMensagem(String msg) {
        progressBar.setString(msg);
    }

    private Container getProgressBar() {
        progressBar = new JProgressBar();
        progressBar.setIndeterminate(true);
        progressBar.setStringPainted(true);
        return progressBar;
    }

    private class ProgressRunnable implements Runnable {

        public void run() {
            try {
                EventQueue.invokeLater(new Runnable() {
                    public void run() {
                        telaMatricula.atualizarTabelaAlunosDaTurma(telaMatricula.idTurma);
                    }
                });
                Thread.sleep(0);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                Progress progre = new Progress(null, true);
                progre.setVisible(true);
            }
        });
    }
}

E o codigo que esta no Action do Salvar


Progress p = new Progress(this, true);
        p.setMensagem("SALVANDO... AGUARDE");
        p.setVisible(true);        
        p.dispose();

Se o seu JProgresBar for “indeterminate”, eu acho que o jeito mais f’acil de montar seria com SwingWorker, segue exemplo:

private void metodoQualquer(){
    new SwingWorker() {
        @Override
        protected Object doInBackground() throws Exception {
            try{
                jProgressBar1.setVisible(true);
                jProgressBar1.setIndeterminate(true);
                
                //faz alguma coisa....
          
            }
            catch(Exception e ){
                e.printStackTrace();
                JOptionPane.showMessageDialog(null, e.getMessage());
            }
            return null;
        }
        @Override  
        protected void done() {  
            jProgressBar1.setVisible(false);
        } 
    }.execute();         
}

Da uma olhada aqui tambem:
http://www.guj.com.br/java/245786-jprogressbar-com-swingworker-
http://www.guj.com.br/java/287920-progressbar-nao-dispara
http://www.guj.com.br/java/48799-exemplo-de-jprogressbar

Valew amigo, vou verificar e qualquer coisa eu posto aqui :smiley: