[Resolvido] Problema metodo finalizar aplicação

Boa tarde, tenho uma pequena aplicação, onde tenho uma opção no menupublic void actionPerformed(ActionEvent e) { if (e.getSource().equals(menuItemSair)) { sair(); }

e no main JFrame janela = new Principal(); // janela.show(); janela.setVisible(true); WindowListener windowListener = new WindowAdapter() { public void windowClosing(WindowEvent e) { sair(); } }; janela.addWindowListener(windowListener);

public void sair() { Object[] options = { "Sim", "Não" }; if (JOptionPane.showOptionDialog(null, "Tem certeza que deseja sair?", "Bolão", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]) == JOptionPane.YES_OPTION) { System.out.println("saindo"); System.exit(-1); } }

Ao clicar no menu > sair ele ja a pergunta, se clicar em Não, blz, nada aconcete, mas se clicar no X ele faz a pergunta, clicando em não ele some com aplicação, mas o processo continua rodando.

Alguem sabe o que pode ser?

vê se o

this.dispose();

funciona!

tenta dar um

janela.dispose();

Talvez eu não tenho sido claro ou não entendi a sugestão.

Quando clicar no “X” o sistema faz a pergunta tudo certinho, o problema é se clicar no “Não”, que não é pra fechar a aplicação.

testa esse código:

if(JOptionPane.showConfirmDialog(null, "Deseja Sair?", "Atenção", JOptionPane.YES_NO_OPTION, 3) == JOptionPane.OK_OPTION){
	System.exit(0);
}

O problema está acontecendo por que ele clica no X de fechar a janela, como fazem 99,87% dos usuários.
Neste caso, eu sugiro deixar fechar duma vez…
Isso por que quem reconhece a chamada para fechar é o SO e não a aplicação, primeiramente.

wellington.nogueira como ficaria no exemplo?

[code]package br.com.bolao.main;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

public class MyPanel extends JFrame implements ActionListener {

private JMenuBar menuBar;
private JMenu menuCadastro;
private JMenuItem menuItemCadastro;
private JMenuItem menuItemSair;

public static void main(String[] args) {
	JFrame janela = new MyPanel();
	janela.setVisible(true);
	WindowListener windowListener = new WindowAdapter() {

		public void windowClosing(WindowEvent e) {
			sair();
		}
	};
	janela.addWindowListener(windowListener);
}

public MyPanel() {
	setTitle("Exemplo");
	setExtendedState(JFrame.MAXIMIZED_BOTH);
	menuBar = new JMenuBar();

	menuCadastro = new JMenu("Menu");

	menuItemCadastro = new JMenuItem("Cadastro");
	menuItemCadastro.addActionListener(this);

	// Sair
	menuItemSair = new JMenuItem("Sair");
	menuItemSair.addActionListener(this);

	menuCadastro.add(menuItemCadastro);
	menuCadastro.add(menuItemSair);

	menuBar.add(menuCadastro);

	setJMenuBar(menuBar);
}

public void actionPerformed(ActionEvent e) {
	if (e.getSource().equals(menuItemCadastro)) {
		JOptionPane.showMessageDialog(null, "Menu cadastro");
	}
	if (e.getSource().equals(menuItemSair)) {
		sair();
	}

}

public static void sair() {
	Object[] options = { "Sim", "Não" };
	if (JOptionPane.showOptionDialog(null, "Tem certeza que deseja sair?", "Bolão", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]) == JOptionPane.YES_OPTION) {
		System.out.println("saindo");
		System.exit(-1);
	}
}

}
[/code]
JonaTHANNM não rolou, fica a mesma coisa

mas vc quer que quando o usuário clique no X ele feche o sistema também?

Se a pessoa clicar em “Sim”, sim deve fechar o sistema, caso contrário o sistema deve permanecer aberto.

[quote=drsmachado]O problema está acontecendo por que ele clica no X de fechar a janela, como fazem 99,87% dos usuários.
Neste caso, eu sugiro deixar fechar duma vez…
Isso por que quem reconhece a chamada para fechar é o SO e não a aplicação, primeiramente.[/quote]

O eclipse tem uma opção de mostrar mensagem se realmente quer fechar a IDE, o que acho extremamente util, pois muitas vezes fechei sem querer, ao fechar outras coisas.

coloca isso que vai resolver o seu problema:

JFrame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

[quote=JonaTHANNM]coloca isso que vai resolver o seu problema:

JFrame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); [/quote]

fecho, vlw

Vc está usando JFrame?
Se sim, dê uma olhada setDefaultCloseOperation() e passe JFrame.EXIT_ON_CLOSE como parâmetro.
Creio que ajuda :slight_smile:

Há também outras opções. Dê uma olhada nos links abaixo
http://download.oracle.com/javase/tutorial/uiswing/components/frame.html
http://download.oracle.com/javase/6/docs/api/javax/swing/JFrame.html
http://download.oracle.com/javase/6/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation(int)