problema na hora de fechar JFrame secundário  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
david.jv
JavaTeenager

Membro desde: 01/10/2010 15:26:54
Mensagens: 193
Offline

Galera mais uma vez venho pedir ajuda de vocês. É o seguinte, criei um botão que tem como função fechar o Jframe secundário.
Explicando melhor:
Criei um button ( nome do button bNao) que tem que fechar o meu Jframe (aviso) secundário sem fechar o meu principal, só que quando eu clico nele me gera um erro.

Código:

Obs.: Peguei esse código de um tópico que tem aqui no site.


Erro gerado:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at supermercado.gui.GUIAviso$3.actionPerformed(GUIAviso.java:96)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:231
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:602
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:423
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:416
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:247
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)


Se alguém souber solucionar esse problema ou tiver um outro código que tenha a mesma função e puder postar eu agradeço.

This message was edited 1 time. Last update was at 02/10/2010 20:52:03

bzy
JavaGuru
[Avatar]

Membro desde: 23/08/2006 19:34:00
Mensagens: 215
Localização: São Paulo - Guarulhos
Offline

Tente trocar o JFrame por um JDialog.

O JFrame é um recurso caro, use o menos possível.

SCJP - Sun Certified Java Programmer
http://meumundojava.blogspot.com/
Memento mori.
[WWW] [ICQ]
david.jv
JavaTeenager

Membro desde: 01/10/2010 15:26:54
Mensagens: 193
Offline

bzy, não entendi. Sou novato no Java, não entendo muita coisa.
david.jv
JavaTeenager

Membro desde: 01/10/2010 15:26:54
Mensagens: 193
Offline

Galera consegui resolver o problema de fechar o JFrame, só que eu preciso dar 2 clicks no botão para ele fechar. Alguém sabe como resolver isso?
Obs.: troquei o Jframe por JDialog. Poderia ser esse o problema de ter que dar 2 clicks ou não tem nada a ver?


código é o seguinte:
[code]
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JDialog;

/*
* @author David
*/
public class GUIAviso extends javax.swing.JDialog {

JDialog Aviso;
public GUIAviso() {
initComponents();
}

//...

private void bNaoMouseClicked(java.awt.event.MouseEvent evt) {
bNao.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
}
[/code]
Se alguém souber como resolver por favor me ajude.

This message was edited 1 time. Last update was at 03/10/2010 00:35:57

Eric Yuzo
GUJ Ranger
[Avatar]

Membro desde: 25/10/2009 20:36:30
Mensagens: 956
Localização: São Vicente - SP
Offline

Este código está adicionando o Action Listener quando há um evento mouseClicked no botão. Por isso que você está tendo que clicar duas vezes.

Coloque o código que adiciona o ActionListener para ser executado com o construtor:
Você também pode colocar o código no método initComponents(), em vez de jogar direto no construtor, que será executado da mesma forma.

Ou então, se você quiser adicionar direto pelo NetBeans, ao invés de selecionar "mouseClicked" selecione "actionPerformed". Dentro dele chame o método dispose(). Deve ficar algo do tipo:

Bom, acho que são estas as opções.

Falou...

O importante mesmo é ser feliz!

DevSV
[WWW]
david.jv
JavaTeenager

Membro desde: 01/10/2010 15:26:54
Mensagens: 193
Offline

Eric Yuzo , muito obrigado cara. Deu certo. Tanto colocar o código no construtor ou usar o dispose() no actionPerformed do button.

Tópico encerrado.
Vlw
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team