Dispose Fecha o frame mas não está encerrando a execução do mesmo! [?]

Bom dia Pessoal!

peço uma ajuda a vocês, pois meu frame não está fechando a execução, percebam que ele fecha a janela, mas não fecha a execução da mesma.

o que eu devo fazer?

package WinEstoque;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.UIManager;

import WinEstoque.WinCadastros.WinCadastroClientes;
import WinEstoque.WinCadastros.WinCadastroProdutos;

public class WinEstoque extends JFrame {
	
	private static boolean statusWindow = false;
	private WinCadastroProdutos cadastroProdutos = new WinCadastroProdutos();
	private WinCadastroClientes cadastroCliente = new WinCadastroClientes();
	JPanel contentPane;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
					WinEstoque frame = new WinEstoque();
					frame.setVisible(true);
					statusWindow = true;
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public WinEstoque() {
		setTitle("Estoque");
		setSize(Toolkit.getDefaultToolkit().getScreenSize().width, Toolkit.getDefaultToolkit().getScreenSize().height-25);
		setExtendedState(MAXIMIZED_BOTH);
		setLocationRelativeTo(null);
		
		/**
		 * Organização e criação dos Menus;
		 */
		JMenuBar jmbEstoque = new JMenuBar();
		setJMenuBar(jmbEstoque);
		
		
		JMenu mnArquivo = new JMenu("Arquivo");
		jmbEstoque.add(mnArquivo);
		
		
		JMenuItem mntmClientes = new JMenuItem("Clientes");
		mnArquivo.add(mntmClientes);
		JMenuItem mntmProdutos = new JMenuItem("Produtos");
		mnArquivo.add(mntmProdutos);
		JSeparator jspSeparador = new JSeparator();
		mnArquivo.add(jspSeparador);
		JMenuItem mntmSair = new JMenuItem("Sair");
		mnArquivo.add(mntmSair);
		
		
		contentPane = new JPanel();
		contentPane.setLayout(new BorderLayout());
		
		
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e){
				if (cadastroCliente.getStatusWindow()==true | cadastroProdutos.getStatusWindow()==true){
					JOptionPane.showMessageDialog(null, "Não é possivel fechar a janela enquanto houver outras janelas abertas!" +
							"\n\nFeche as demais janelas vinculadas a esta para poder fechar o sistema!", "Aviso", JOptionPane.INFORMATION_MESSAGE);
					statusWindow = true;
					setDefaultCloseOperation(JFrame.NORMAL);
				}else if (cadastroCliente.getStatusWindow()==false && cadastroProdutos.getStatusWindow()==false){
					statusWindow = false;
					setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
				}
			}
		});
		
		
		/**
		 * Ações dos Menus
		 */
		mntmClientes.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(cadastroCliente.getStatusWindow() == true){
					JOptionPane.showMessageDialog(null, "Só é possível abrir uma janela de Cadastro de Clientes!", "Aviso", JOptionPane.INFORMATION_MESSAGE);
				}else{
					WinCadastroClientes.main(null);
				}
			}
		});
		
		mntmProdutos.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(cadastroProdutos.getStatusWindow() == true){
					JOptionPane.showMessageDialog(null, "Só é possível abrir uma janela de Cadastro de Clientes!", "Aviso", JOptionPane.INFORMATION_MESSAGE);
				}else{
					WinCadastroProdutos.main(null);
				}
			}
		});
		
		
		mntmSair.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				if (cadastroCliente.getStatusWindow()==false && cadastroProdutos.getStatusWindow()==false){
					statusWindow = false;
					dispose();
				}else{
					JOptionPane.showConfirmDialog(null, "Não é possivel fechar a janela enquanto houver outras janelas abertas!" +
							"\n\nFeche as demais janelas vinculadas a esta para poder fechar o sistema!", "Aviso", JOptionPane.INFORMATION_MESSAGE);
					statusWindow = true;
				}
			}
		});
		/**
		 * Inserir Paineis com as mesmas Opções dos Menus
		 */
		
	}
	
	public static boolean getStatusWindow(){
		return statusWindow;
	}
}

se Vocês poderem me ajudar, agradeço!!!

Utilize…

Exatamente!!!

Olá Welington e Flavio!

se eu fizer isto o programa finalizara por completo, peço desculpas por não ter explicado, mas este Frame já é aberto através de outras janelas…

Preciso de um método que finalize apenas este frame e encerre também sua execução na JVM, que não está acontecendo.

Achei que o dispose(); fizesse isso, e em outras classes ele funciona, apenas nessa não está funcionando, ainda estou tentando achar o problema nesta classe…

Valeu pela Ajuda!

[quote=SALVADORAUGUSTO]Olá Welington e Flavio!

se eu fizer isto o programa finalizara por completo, peço desculpas por não ter explicado, mas este Frame já é aberto através de outras janelas…

Preciso de um método que finalize apenas este frame e encerre também sua execução na JVM, que não está acontecendo.

Achei que o dispose(); fizesse isso, e em outras classes ele funciona, apenas nessa não está funcionando, ainda estou tentando achar o problema nesta classe…

Valeu pela Ajuda![/quote]
Ahhhhhhhhhhhhhhhhhh
Por que não disse isso logo?!
:smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley:

Foi mal, esqueci!!!

kkkk

:smiley: :smiley: :smiley:

Cara,
Eu particularmente sempre utilizo .dispose() para este tipo de situação.
Até porque não conheço outro método que faça isso (detalhe: sou novo em Java).
Talvez os experientes possam responder.

Pessoal Criei uma classe teste dentro da mesma package para verficar.

[code]package WinEstoque;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;

import WinEstoque.WinCadastros.WinCadastroClientes;
import WinEstoque.WinCadastros.WinCadastroProdutos;

public class teste extends JFrame {

private JPanel contentPane;
private WinCadastroProdutos cadastroProdutos = new WinCadastroProdutos();
private WinCadastroClientes cadastroCliente = new WinCadastroClientes();
private static boolean statusWindow = false;

/**
 * Launch the application.
 */
public static void main(String[] args) {
	EventQueue.invokeLater(new Runnable() {
		public void run() {
			try {
				UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
				teste frame = new teste();
				frame.setVisible(true);
				statusWindow = true;
			} catch (Exception e) {
				statusWindow = false;
				e.printStackTrace();
			}
		}
	});
}

/**
 * Create the frame.
 */
public teste() {
	setTitle("Teste DISPOSE()");
	setSize(350, 450);
	setResizable(false);
	setLocationRelativeTo(null);
	teste.this.addWindowListener(new WindowAdapter(){
		public void windowClosing(WindowEvent e){
			statusWindow = false;
			setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		}
	});
	contentPane = new JPanel();
	setContentPane(contentPane);
}



/**
 * 
 * @return Valor referente ao estado da Janela
 */
public static boolean getStatusWindow(){
	return statusWindow;
}

}
[/code]

Resultado Obtido:

se os dois objetos criados da classe cadastro de produtos e clientes não fizer parte da classe funciona…

[code]package WinEstoque;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;

import WinEstoque.WinCadastros.WinCadastroClientes;
import WinEstoque.WinCadastros.WinCadastroProdutos;

public class teste extends JFrame {

private JPanel contentPane;
//private WinCadastroProdutos cadastroProdutos = new WinCadastroProdutos();
//private WinCadastroClientes cadastroCliente = new WinCadastroClientes();
private static boolean statusWindow = false;

/**
 * Launch the application.
 */
public static void main(String[] args) {
	EventQueue.invokeLater(new Runnable() {
		public void run() {
			try {
				UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
				teste frame = new teste();
				frame.setVisible(true);
				statusWindow = true;
			} catch (Exception e) {
				statusWindow = false;
				e.printStackTrace();
			}
		}
	});
}

/**
 * Create the frame.
 */
public teste() {
	setTitle("Teste DISPOSE()");
	setSize(350, 450);
	setResizable(false);
	setLocationRelativeTo(null);


	setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);


	contentPane = new JPanel();
	setContentPane(contentPane);
}



/**
 * 
 * @return Valor referente ao estado da Janela
 */
public static boolean getStatusWindow(){
	return statusWindow;
}

}[/code]

funciona…

alguém sabe me explicar?

será que o problema está mesmo na lista de eventos?

Pessoal Resolvido!!!

:thumbup:

Coloquei os métodos da classe principal como static para evitar ter que criar um objeto, uma vez que quando foi feito isso, não encerrava o programa;

se houver mais alguma solução, por favor, não deixem de postar, quanto mais conhecimento melhor!!!

Valeu :smiley:

[quote=Flavio05]Utilize…

JFrame.EXIT_ON_CLOSE;[/quote]no método setDefaultCloseOperation