acabei de me lembrar do System.exit(0) acho que é isso
só não testei se esse comando fecha apenas a janela ou fecha a aplicação toda
[quote=thingol]setVisible(false) descarrega o tal frame, se ele estiver configurado para ser descarregado (ou seja, o JFrame foi configurado com “setDefaultCloseOperation(SwingConstants.DISPOSE_ON_CLOSE)”, se não me engano (não sei isso de cor.)
[/quote]
ele está configurado para setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE) pois foi o código gerado pelo netbeans
Use esse método:
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
se vc quer descarregar explicitamente, use o jframe.dispose()
obrigado pelas dicas,
funcionou apenas quando chamei o método jframe.dispose() explicitamente.
vlw
Só para iluminar mais as idéias, o setVisible() só seta a visibilidade do JFrame, ou seja, true = visível e false = invisível.
Este defaultCloseOperation é usado quando você clica no “X” da janela.
flw
no meu caso eu queria um comando, para adicionar no ActionPerformed do botão cancelar, que fechache a janela. E agora funcionou certinho
Utilize:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Não há como errar
[quote=gustavo.magni]Utilize:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
[/quote]
O Netbeans não deixa vc alterar o código gerado por ele
Cara olhe as propriedade jo JFrame no netBeans
as propriedades são:
javax.swing.WindowConstants.EXIT_ON_CLOSE
javax.swing.WindowConstants.DISPOSE_ON_CLOSE
javax.swing.WindowConstants.BLABLÁ
não tem como mudar para JFrame.EXIT_ON_CLOSE, mas se essa variável for igual a primeira da lista, é a default do Netbeans, e mesmo assim não funciona.
Olá pessoal…
Para ter um JFrame que encerre toda a aplicação, a propriedade DefaultCloseOperation dele deve estar configurada como EXIT_ON_CLOSE.
Para ter um JFrame que não encerre toda a aplicação, que simplesmente se feche, a propriedade DefaultCloseOperation dele deve estar configurada como DISPOSE_ON_CLOSE.
Lembrando que no NetBeans, é possível alterar essa propriedade clicando com o botão direito do mouse sobre o JFrame em questão e na aba Properties é a primeira propriedade.
No caso de se ter um botão para fechar o JFrame, os códigos:
System.exit(0); encerra a aplicação.
this.dispose(); fecha somente o JFrame em questão, onde this = JFrame.
O método setVisible(); serve somente para exibir ou não o JFrame na tela.
Quanto a alocação e liberação do espaço de memória alocado, é a propria JVM que irá fazer através dos recursos de GarbageCollector, e no momento que ela julgar ser o melhor para não prejudicar a performance do sistema, ela irá remover todo objeto que não possui mais referências e liberar o espaço de memória que foi alocado para ele.
http://www.guj.com.br/java.tutorial.artigo.28.1.guj (Muito interessante tbem)
Espero ter ajudado pessoal, vlw t+
Eu estava com essa mesma dúvida ha um tempo atrás e resolvi meu problema com os seguintes comandos no botão SAIR
private void jButton_exitActionPerformed(java.awt.event.ActionEvent evt) {
this.setVisible(false);
Runtime.getRuntime().exit(0);
}
isso mata akele processo q fica rodando quando vc dá um setVisible(false); e o netbeans diz q continua rodando uma IDE…
Acho q foi isso que vc perguntou…
[/]'s
[quote=Giulliano]Eu estava com essa mesma dúvida ha um tempo atrás e resolvi meu problema com os seguintes comandos no botão SAIR
private void jButton_exitActionPerformed(java.awt.event.ActionEvent evt) {
this.setVisible(false);
Runtime.getRuntime().exit(0);
}
isso mata akele processo q fica rodando quando vc dá um setVisible(false); e o netbeans diz q continua rodando uma IDE…
Acho q foi isso que vc perguntou…
[/]'s[/quote]
aqui funcionou com o comando jframe.dispose(), mas esse que vc falou eu não testei.
e cleiton, valeu pelas explicações
Olá, por exemplo se vc tiver um cadastro e quiser sair de um frame mas não fechar o aplicativo então utilize:
this.dispose();
Assim apenas aquele frame que será fechado :!: :!: :!:
Estou aqui para agradecer por solucionarem esta dúvida.
Ajudou-me demais este comando this.dispose(). funcionou corretamente como eu queria.
Só para ajudar alguém que possa ter o mesmo problema que o meu, eu usei este comando para fechar uma tela de login que
fiz no meu sistema e abrir a tela principal do sistema.
E funcionou corretamente.
Ao logar no sistema, a tela de login fechou e a principal abriu numa boa.
Obrigado!
Eu preciso fazer usando While. Estou tentando evitar o erro de exceção.
Mas quero que a aplicação se feche apenas quando o usuário clicar no botão “cancelar” do JOptionPane.
boolean valido = true;
while (true) {
…
}
Ou seja se o usuário deixar algum campo em branco, mostra a mensagem de erro, mas o programa não fecha.
Já pesquisei em vários lugares, mas nada do que encontrei, me atendeu.
To postando o código pra vcs entenderem melhor.
package Atividade6;
import javax.swing.JOptionPane;
/**
*
* @author David Renan
*/
public class Principal {
public static void main(String[] args) {
// TODO code application logic here
//String[] valores;
String valores;
int numeros[], n;
Cadastro cad = new Cadastro();
String entrada;
boolean valido = true;
while (true) {
try {
entrada=JOptionPane.showInputDialog("1- Adicionar sorteio aleatorio \n 2- Adicionar sorteio "
+ "\n 3- Imprimir");
int opcao = Integer.parseInt(entrada);
if (entrada != null) {
if (opcao==1) {
try {
n=Integer.parseInt(JOptionPane.showInputDialog("Quantos elementos terá o vetor?"));
cad.add(new Sena(n));
}
catch (NumberFormatException excecao)
{
JOptionPane.showMessageDialog(null, "Verifique se digitou os dados corretamente.");
}
}
else if (opcao==2) {
try {
valores = JOptionPane.showInputDialog("Entre com os numeros separados por ;");
cad.add(new Sena(valores));
}
catch (NumberFormatException excecao)
{
JOptionPane.showMessageDialog(null, "Verifique se digitou os dados corretamente.");
}
}
else if (opcao==3) {
cad.imprimir();
}
}
}
catch (NumberFormatException excecao) {
JOptionPane.showMessageDialog(null, "Digite a informaçao corretamente");
}
}
}
}
Eu faço da seguinte forma:
JFrame frame = new JFrame();
frame.setVisible(true);
dispose();
Ah e colocar this.dispose(); dependendo da estrutura fecha todos janelas abertas. Opto por nesse caso somente dispose();
Galera, boa noite, estou reabrindo um tópico, pois estou tendo quase o mesmo problema que o cara estava tendo. Eu preciso fechar um JFrame, mas acredito que estou passando os comandos certos e não está funcionando. Este método abaixo, funcionava muito bem quando estava na classe da tela. Porém, por questões de manutenção e clean code, eu quis mudar todos os métodos referentes a menu para uma classe especifica. Desde então, sempre que estou em uma tela e tento mudar de tela usando alguma opção do menu a outra tela é aberta, porém a tela anterior continua aberta em segundo plano. Alguém consegue me ajudar?
private JMenuItem getJMenuItemEmail() {
if (jMenuItemEmail == null) {
jMenuItemEmail = new JMenuItem();
jMenuItemEmail.setText("Enviar E-MAIL");
jMenuItemEmail.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
EmailVIEW email = new EmailVIEW();
// Alterando a forma de fechamento da tela.
email.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
EmailController.getInstance().abrirTela();
//TODO
// Fechando a tela quando chamar algum menu.
dispose();
}
});
}
return jMenuItemEmail;
}