Pessoal,
Estou com o seguinte problema:
Tenho uma tela, no estilo splash, que gostaria que aparecesse para o usuário toda vez que alguma ação demorada executar, como por exemplo, uma consulta no banco (considere um banco na web, acessado pela maquina do cliente que possui link de 1 MB - isso chega a levar de 2 a 7 segundos pra completar cada ação- )
A splashScreen funciona perfeitamente sozinha, porém quando chamo ela dentro de outro frame, a tela aparece, junto com a label que criei, mas a barra não, e quando a execução da minha operação no banco termina é que a barra aparece e começa e se mover (estou usando setIndeterminate(true))
Tentei de outras formas também, como criar uma progressBar diretamente no meu form, mas ocorre o mesmo, ela só inicia a execução depois que a consulta no banco já terminou, o que não adianta muito, rs.
Abaixo o código da splash screen, lembrando que ela funciona perfeitamente se for chamada sozinha:
public class waitScreen extends JWindow {
public waitScreen() {
JPanel content = (JPanel) getContentPane();
content.setBackground(Color.white);
final JProgressBar barra = new JProgressBar();
int width = 350;
int height = 150;
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int x = (screen.width - width) / 2;
int y = (screen.height - height) / 2;
setBounds(x, y, width, height);
Label label = new Label("Aguarde!!");
content.add(label, BorderLayout.SOUTH);
content.add(barra, BorderLayout.CENTER);
Color verm = new Color(156, 20, 20, 255);
content.setBorder(BorderFactory.createLineBorder(verm, 1));
setVisible(true);
SwingUtilities.invokeLater(new Runnable(){
public void run() {
barra.setIndeterminate(true);
}
});
}
public static void main(String[] args) {
new waitScreen();
}
}
A chamada da minha tela estou realizando antes de chamar o método que conecta no banco, como no exemplo abaixo:
new waitScreen();
meuMetodoDemorado();
Note que ainda não estou preocupado com o fechamento da tela, apenas quero fazer ela aparecer na tela enquanto meu método executa.
Como comentei, tentei criar a progressBar diretamente no meu form, e criei uma Thread para dispertá-la, mas ocorre o mesmo, ela só inicia quando a execução do meu método termina.
Tentei criando actionListener, Thread (propriamente dita) e invokeLater mas nada mudou.
Se alguém tiver alguma luz, ou souber de alguma forma mais fácil de deixar essa barrinha visível enquanto algo executa eu ficarei grato.
Abraços