I have a configuration window that opens on the first run of the application I'm developing. After typing the directories that the application will run the user clicks save, some tests are run and finally a Thread runs.
I would like to have the configuration window closed by itself after finishing execution of this Thread, but I tried to run dispose()
and setVisible()
and it disappears before running Thread.
// Evento para salvar os diretórios
btnSalvar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// Testa o campo com o diretório a ser indexado
// Se está vazio
if ((txtDirIndexado.getText().length() == 0 || Character
.toString(txtDirIndexado.getText().charAt(0)).equals(
" "))) {
JOptionPane
.showMessageDialog(panel,
"O campo com o diretório a ser indexado não pode estar em branco.");
} else if ((txtDirIndice.getText().length() == 0 || Character
.toString(txtDirIndexado.getText().charAt(0)).equals(
" "))) {
JOptionPane
.showMessageDialog(panel,
"O campo com o diretório que guardará o índice não pode estar em branco.");
} else {
try {
ArquivoDeConfiguracao.defineFonte(txtDirIndexado.getText());
ArquivoDeConfiguracao.defineIndice(txtDirIndice.getText());
ArquivoDeConfiguracao.definePrimeiraExecucao(1);
// Janela de aguardo
final JDialog janelaProgresso = new IndexAndo();
// Cria um novo processo e mostra a janela
new Thread(new Runnable() {
public void run() {
Indexador ind = new Indexador();
ind.iniciaIndexacao();
// Ao terminar fecha
SwingUtilities.invokeLater(new Runnable() {
public void run() {
janelaProgresso.setVisible(false);
}
});
}
}).start();
// Salva a data
dispose();
ArquivoDeConfiguracao.defineIndiceUltAtualizacao();
} catch (IOException e) {
// Gera erro
e.printStackTrace();
}
}
}
});
The code is fully can be accessed in git .
Edition:
// Evento para salvar os direstórios
btnSalvar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// Testa o campo com o diretório a ser indexado
// Se está vazio
if ((txtDirIndexado.getText().length() == 0 || Character
.toString(txtDirIndexado.getText().charAt(0)).equals(
" "))) {
JOptionPane
.showMessageDialog(panel,
"O campo com o diretório a ser indexado não pode estar em branco.");
// Se está vazio
} else if ((txtDirIndice.getText().length() == 0 || Character
.toString(txtDirIndexado.getText().charAt(0)).equals(
" "))) {
JOptionPane
.showMessageDialog(panel,
"O campo com o diretório que guardará o índice não pode estar em branco.");
// Se o diretório existe
} else {
try {
ArquivoDeConfiguracao.defineFonte(txtDirIndexado.getText());
ArquivoDeConfiguracao.defineIndice(txtDirIndice.getText());
ArquivoDeConfiguracao.definePrimeiraExecucao(1);
final JDialog janelaProgresso = new IndexAndo();
new Thread(new Runnable() {
public void run() {
ProcessoIndexacao base = new ProcessoIndexacao();
base.start();
synchronized (base){
try {
base.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
janelaProgresso.setVisible(false);
}
});
}
}).start();
janelaProgresso.setVisible(true);
// Salva a data
ArquivoDeConfiguracao.defineIndiceUltAtualizacao();
} catch (IOException e) {
// Gera erro
e.printStackTrace();
}
}
dispose();
}
public class ProcessoIndexacao extends Thread{
public void run(){
synchronized (this){
Indexador ind = new Indexador();
ind.iniciaIndexacao();
notify();
}
}
}