Ajuda rápido ! Pergunta no fechamento do programa

Pessoal,
Estava com problemas no entendimento de Eventos, mas agora estou entendendo melhor. Fiz uma pergunta e coloquei no WindowEvent para ela aparecer toda hora quando eu clicar no “X” do programa e funcionou.
Agora eu gostaria que essa pergunta só seja feita quando eu clicar no botão de processar o programa e se eu for fechar o programa no “X” aparecer a pergunta se deseja fechar o programa.
Alguém poderia me ajudar ? Onde eu devo colocar a pergunta e como eu devo fazer.
Segue abaixo o código que eu fiz:

		int opcao = JOptionPane.showOptionDialog(null, 
				"Deseja fechar o Programa?", "PERGUNTA", 
				JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, 
				null, null, null);
		
		if (opcao == 0) {
			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		} else {
			this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		}

… Preciso de uma condição entre essa pergunta e saber onde eu a coloco…

Estou no aguardo e desde já obrigado,

faz assim, no na construção da janela principal do programa vc deixa configurado

this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

ai vc adiciona um WindowListener como esse

[code]publi class classeWindowListener extends WindowAdapter{
public void windowClosing( WindowEvent e ){
int opcao= JOptionPane.showOptionDialog(null,
“Deseja fechar o Programa?”, “PERGUNTA”,
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,
null, null, null);

  if (opcao == 0) { 
     System.exit(0); 
  }

}
}
[/code]

Ola galera…
A minha questão é a seguinte:

  • Tenho como saber como o usuário esta fechando a minha aplicação?
    Tipo assim, se ele clicou no “X”, ou se ele deu “alt+f4”, ou se ele tah tentando finalizar o SO??

Valeu!!

Quando uma janela é fechada ela chama o metodo windowClosing() do WindowsListener dela, n importa se ela é fechada pela “X” ou por “Alt+F4”.
Nunca testei finalizar o SO, mas acho q tb chama, porem vc n pode impedir q o SO se deslique, acho q vai chamar o método e depois encerrar o programa na marra se ainda estiver aberto, mas isso é só especulação!

Quando eu utilizava o VB (muito tempo atras) ele tinha estas opcoes, e dava pra controlar, pelo menos no windows, e queria saber se no java tambem dava.

valeu pela ajuda

Daniel,
Testei o código e o programa não fechava de jeito nenhum quando eu clicava no “X”. E quando eu comecei a processar o programa ele não chamou a pergunta.
Coloquei o setDefault na janela principal e o código eu coloquei no windowClosing do construtor da minha tela. Eu não criei uma outra classe.
O que será que deu errado ?
O que eu queria era que essa pergunta aparecesse quando eu já tivesse clicado no botão de Processar, pelo que eu sei o evento do botão é ActionListener - actionPerformed.
Tem alguma ajuda para este caso ? Ou será que eu fiz alguma coisa errada no seu código, coloquei em lugar errado …

Obrigado pela ajuda e estou aguardando,

[quote]Coloquei o setDefault na janela principal e o código eu coloquei no windowClosing do construtor da minha tela. Eu não criei uma outra classe.
O que será que deu errado ?
[/quote]

tente assim:

addWindowListener(
  new WindowAdapter(){
    public void windowClosing(WindowEvent e){
       System.exit(0);
    }
  }
);

Desta forma quando o usuario clicar no “x” do aplicativo o aplicativo se encerrara.

esse código ta testado, deve servir como exemplo

import javax.swing.*;
import java.awt.event.*;

public class Teste extends JFrame{
	
   public Teste(){
      setBounds(100,100,600,400);

      this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
      this.addWindowListener(new WindowListener());

      show();
   }
	
   public static void main(String[] args){
      Teste app= new Teste();
   }
	
   public class WindowListener extends WindowAdapter{
      public void windowClosing(WindowEvent e){
         int opcao= JOptionPane.showOptionDialog(null, 
               "Deseja fechar o Programa?", "PERGUNTA", 
               JOptionPane.YES_NO_OPTION,
               JOptionPane.QUESTION_MESSAGE, 
               null, null, null); 
         if (opcao == 0) { 
            System.exit(0); 
         } 
      }
   }
}

qqr coisa Grita

Pessoal, consegui terminar a pergunta!
Eu criei a classe windowClosing no programa principal com a pergunta; na outra Thread do meu programa eu criei uma variável int chamada “flag” e no run() eu seto esta variável como 1; na classe windowClosing do programa principal eu verifico com um if se a variável esta com o valor 1, se estiver ele faz a pergunta, senão ele fecha o programa.

Obrigado,