Gente, essa eu não entendi mesmo!!! 
Na classe listener da minha tela de menu do sistema, tenho o seguinte código (resumidamente) na chamada de um determinado relatório:
// isso é pra mostrar na tela principal um progressbar mexendo só pro usuário saber que está carregando o rel
((TelaPrincipal)Base.frameTela).lblInformacao.setVisible(true);
((TelaPrincipal)Base.frameTela).lblInformacao.setEnabled(true);
((TelaPrincipal)Base.frameTela).lblInformacao.setText("Carregando relatório...");
((TelaPrincipal)Base.frameTela).pgbStatus.setVisible(true);
((TelaPrincipal)Base.frameTela).pgbStatus.setEnabled(true);
((TelaPrincipal)Base.frameTela).pgbStatus.setIndeterminate(true);
((TelaPrincipal)Base.frameTela).pgbStatus.repaint();
// crio meu relatório
RelatoriosPersonalizados rp = new RelatoriosPersonalizados(false);
// apresento ele na tela
rp.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
rp.setVisible(true);
Dimension infScreen = rp.getSize();
int infHeight = infScreen.height;
int infWidth = infScreen.width;
rp.setLocation(telaPrincipal.desktopPane.getSize().width/2-infWidth/2,telaPrincipal.desktopPane.getSize().height/2-infHeight/2);
telaPrincipal.desktopPane.add(rp);
try {
rp.setSelected(true);
} catch (Exception x) {
x.printStackTrace();
}
Bom, o que eu esperava que acontecesse seria mostrar o progressbar rodando já de início e por fim, depois, abrir a tela.
No entanto, o que acontece é ficar sem fazer nada na tela e de repente abre a tela e inicia o progressbar juntos! :shock:
Alguém pode me dizer pq isso acontece? Já usei invokeLater e nada, Thread.sleep() e tb não deu! Alguma sugestão?!
Grata,
Me parece que a parte do progress bar e a geração do relatório deveriam estar em threads diferentes para você ter o resultado que espera. Pois logo depois que você seta as propriedades do progress bar, a aplicação fica “trancada” aguardando o retorno da geração do relatório.
Olá, Renata
O método invokeLater deveria funcionar, lembrando que apenas o trecho do codigo abaixo deve estar dentro dele:
((TelaPrincipal)Base.frameTela).lblInformacao.setVisible(true);
((TelaPrincipal)Base.frameTela).lblInformacao.setEnabled(true);
((TelaPrincipal)Base.frameTela).lblInformacao.setText(“Carregando relatório…”);
((TelaPrincipal)Base.frameTela).pgbStatus.setVisible(true);
((TelaPrincipal)Base.frameTela).pgbStatus.setEnabled(true);
((TelaPrincipal)Base.frameTela).pgbStatus.setIndeterminate(true);
((TelaPrincipal)Base.frameTela).pgbStatus.repaint();
abraços,
De uma olhada na classe SwingWorker também, pois é como um invokeLater() mas com algumas melhorias
se utiliza java 6: http://java.sun.com/javase/6/docs/api/javax/swing/SwingWorker.html
senao:
https://swingworker.dev.java.net/
abraços
Pessoal, tentei tudo que me sugeriram, nada deu certo. Ai, por fim tivemos uma idéia :idea: e funcionou. Veja como resolvi caso alguém precise disso futuramente:
Thread threadRelatoriosPersonalizados = new Thread(new ThreadRelatoriosPersonalizados());
threadRelatoriosPersonalizados.start();
E criei toda aquela chamada de código que eu fazia, numa classe Thread separada, assim:
public class ThreadRelatoriosPersonalizados implements Runnable {
public ThreadRelatoriosPersonalizados(){}
public void run() {
// isso é pra mostrar na tela principal um progressbar mexendo só pro usuário saber que está carregando o rel
((TelaPrincipal)Base.frameTela).lblInformacao.setVisible(true);
((TelaPrincipal)Base.frameTela).lblInformacao.setEnabled(true);
((TelaPrincipal)Base.frameTela).lblInformacao.setText("Carregando relatório...");
((TelaPrincipal)Base.frameTela).pgbStatus.setVisible(true);
((TelaPrincipal)Base.frameTela).pgbStatus.setEnabled(true);
((TelaPrincipal)Base.frameTela).pgbStatus.setIndeterminate(true);
((TelaPrincipal)Base.frameTela).pgbStatus.repaint();
// crio meu relatório
RelatoriosPersonalizados rp = new RelatoriosPersonalizados(false);
// apresento ele na tela
rp.setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);
rp.setVisible(true);
Dimension infScreen = rp.getSize();
int infHeight = infScreen.height;
int infWidth = infScreen.width;
rp.setLocation(telaPrincipal.desktopPane.getSize().width/2-infWidth/2,telaPrincipal.desktopPane.getSize().height/2-infHeight/2);
telaPrincipal.desktopPane.add(rp);
try {
rp.setSelected(true);
} catch (Exception x) {
x.printStackTrace();
}
}
}
Desta forma funciona! :?
Obrigada à todos!
Puxa, essa foi a minha sugestão, acho que não fui muito claro 
Desculpa! Juro que entendi outra coisa… rs… :oops: :oops: :oops:
Mas valeu!
Semp problemas, eu devia ter colocado um trecho de código exemplificando… a didática não é meu ponto forte. :oops:
De qualquer maneira o importante é que está funcionando 8)