Olá amigos, estou com o seguinte problema em um JDialog,
preciso realizar o processo abaixo por N vezes
parte 1: criar um arquivo tipo texto
parte 2: chamar um arquivo .exe para ler o arquivo
parte 3: ler o arquivo de saída do .exe da parte 2
Estou pensando em fazer tudo isso dentro de um JDialog que mostre uma barra de progresso e usar um thread para caso o arquivo .exe trave, dê para fechar a janela apertando um botão Cancelar por exemplo.
Eu coloquei tudo no método executar() , que chamo lá no construtor do JDialog, mas quando acaba tudo, o comando .dispose() que fica no final do método executar() não é executado.
Será que a minha lógica está errada ou o método .dispose() não é executado “sozinho”? Pois eu quero que o JDialog abra, execute e feche sozinho.
pra resumir o problema, eu editei esse post e resumi os códigos que realmente interessam, ficando mais fácil de entender
o construtor do JDialog que tem a barra de progresso e o botão Cancelar para interromper a thread
/** Creates new form JanelaExecutaCortebi */
public JanelaExecuta(java.awt.Frame parent, boolean modal,
ArrayList<Placa> placas, JanelaMontagemLotes jan)
{
super(parent, modal);
initComponents();
this.jan = jan;
executar(placas);
}
método executar que não fecha o JDialog
public void executar(ArrayList<Placa> placas)
{
// aqui é colocado o thread que é executado normalmente
//quando termina a execução do thread, o comando abaixo não é processado
this.dispose();
}
Na verdade a parte de thread está funcionando bem, o problema era que quando o JDialog terminava os cálculos, ele não fechava sozinho.
Resolvi utilizando um Timer no final do método que realizava as tarefas, e setei para um tempo bem pequeno, porque quero que o JDialog feche imediatamente após executar a tarefa.
Deste modo pode-se utilizar o JDialog normalmente, inclusive com o modal sendo true. Seque o código do timer que pode ser colocado para fechar um JDialog (e provavelmente também JFrames e afins) de maneira automática
int tempo = 100; //valor pequeno para fechar o JDialog rapidamente após executar as tarefas
Timer timer = new Timer(tempo, new ActionListener()
{
public void actionPerformed(ActionEvent ev)
{
dispose();
}
});
timer.setRepeats(false);
timer.start();
Obs: Caso usem este meu método, e o JDialog aparecer só depois do thread realizar a tarefa, basta colocar um timer no construtor também, para simular um evento “iniciar processo”, daí o JDialog vai aparecer do início ao fim do processamento da tarefa.
Obrigado a lina e ao ViniGodoy que tentaram ajudar e um abraço aos demais