Ja pesquisei bastante aqui no GUJ mesmo, e em outras fontes, infelizmente não encontrei nada que tirasse realmente minha duvida.
O problema e o seguinte, tenho um Jframe com varias Jtable e outros componentes, atrelados ao Banco de dados, estou tentando executar meu Splash Screen quando tenho aquele pequeno delay de consulta no banco, porem o mesmo insiste em ser executado apenas quando o método de consulta no banco concluido.
Ja tentei startar diversas Threads e continuo com o mesmo problema, lembrando que preciso criar e matar a Thread toda vez que clico em algum botão.
O seu problema é que você tem de estudar como funciona o relacionamento das Threads com Swing. Vou dar um exemplo, só para você ver o que pode ser feito.
Achei estranha a sua colocação. A partir do momento em que você cria sua Thread e ela não está em looping (while… isInterrupted), a thread será morta sozinha após executar seu bloco de código.
Se quiser arraste um jProgressBar ao seu frame pra testar.
Suponhetamos que temos a seguinte thread.
class ProgressBarThread extends Thread {
@Override
public void run() {
jProgressBar1.setVisible(true);
jProgressBar1.setIndeterminate(true);//coloco meu ProgressBar como indefinido, visto eu nao ter uma tarefa com tempo especifico
jProgressBar1.setStringPainted(true);
jProgressBar1.setString("Enviando");}
public void interrupt(){
jProgressBar1.setVisible(false);
jProgressBar1.setIndeterminate(false);
jProgressBar1.setStringPainted(false);
jProgressBar1.setString("");}}
e tenho um botao que está em loop.
private void button1ActionPerformed(java.awt.event.ActionEvent evt) {
for (int x=0;x<=800;x++){
JOptionPane.showMessageDialog(rootPane,"Valor de X: "+x);
}
}
Podemos criar uma thread para o evento do botao.
EX:
//conteudo do botao - seu caso o insert no seu banco, ou select
class gravarnoBanco extends Thread {
public void run() {
ProgressBarThread TP = new ProgressBarThread();//chamo a outra thread
for (int x=0;x<=800;x++){
//System.out.println("Valor de X: "+x);
JOptionPane.showMessageDialog(rootPane,"Valor de X: "+x);
}TP.interrupt(); //para a thread ProgressBarThread
}}
E no botao eu chamo as duas threads.
private void button1ActionPerformed(java.awt.event.ActionEvent evt) {
ProgressBarThread thread1 = new ProgressBarThread();
thread1 .start();
gravarnoBanco thread2 = new gravarnoBanco();
thread2.start();
}