[Resolvido] Problema metodo finalizar aplicação

12 respostas
xandevieira

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?

12 Respostas

L

vê se o

this.dispose();

funciona!

JonaTHANNM

tenta dar um

janela.dispose();
xandevieira

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.

JonaTHANNM

testa esse código:

if(JOptionPane.showConfirmDialog(null, "Deseja Sair?", "Atenção", JOptionPane.YES_NO_OPTION, 3) == JOptionPane.OK_OPTION){
	System.exit(0);
}
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.

xandevieira
wellington.nogueira como ficaria no exemplo?
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);
		}
	}
}
JonaTHANNM não rolou, fica a mesma coisa
JonaTHANNM

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

xandevieira

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

xandevieira

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.

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.

JonaTHANNM

coloca isso que vai resolver o seu problema:

JFrame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
xandevieira

JonaTHANNM:
coloca isso que vai resolver o seu problema:

JFrame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

fecho, vlw

WellingtonRamos

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)

Criado 27 de maio de 2011
Ultima resposta 27 de mai. de 2011
Respostas 12
Participantes 5