JInternalFrame e JPanel [RESOLVIDO]

10 respostas
LarissaNepomuceno

Olá Pessoal, tenho um dúvida que está me correndo! Seguinte:

Tenho uma aplicação em JDesktopFrame, nele tenho dois JPanel, no qual em um deles é aberto um JInternalFrame. Até aí beleza, tudo funciona - eu abro o JInternalFrame no JPanel e ok. O problema é na hora de Fechar ou de Minimizar o JInternalFrame. Ele apresenta o Erro:

NullPointerException

Acredito que é porque ao fechar ou minimizar espera-se que o frame não esteja vazio… É isso mesmo? Como resolver essa questão?
Valew pessoal :roll:

10 Respostas

ViniGodoy

Poste o método em que o erro ocorre. Ressalte também com algum comentário a linha que isso acontece.
E não se esqueça da tag code.

LarissaNepomuceno

Aqui o erro:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at javax.swing.JDesktopPane.getNextFrame(JDesktopPane.java:396) at javax.swing.JDesktopPane.getNextFrame(JDesktopPane.java:419) at javax.swing.DefaultDesktopManager.closeFrame(DefaultDesktopManager.java:100) at javax.swing.plaf.basic.BasicInternalFrameUI.closeFrame(BasicInternalFrameUI.java:547) at javax.swing.plaf.basic.BasicInternalFrameUI$Handler.propertyChange(BasicInternalFrameUI.java:1410) at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335) at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327) at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263) at java.awt.Component.firePropertyChange(Component.java:8303) at javax.swing.JInternalFrame.doDefaultCloseAction(JInternalFrame.java:1633) at javax.swing.plaf.basic.BasicInternalFrameTitlePane$CloseAction.actionPerformed(BasicInternalFrameTitlePane.java:610) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2015) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2338) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.Component.processMouseEvent(Component.java:6430) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6195) at java.awt.Container.processEvent(Container.java:2203) at java.awt.Component.dispatchEventImpl(Component.java:4790) at java.awt.Container.dispatchEventImpl(Container.java:2261) at java.awt.Component.dispatchEvent(Component.java:4616) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4800) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4463) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4393) at java.awt.Container.dispatchEventImpl(Container.java:2247) at java.awt.Window.dispatchEventImpl(Window.java:2671) at java.awt.Component.dispatchEvent(Component.java:4616) at java.awt.EventQueue.dispatchEvent(EventQueue.java:651) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:255) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:170) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:160) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:155) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) at java.awt.EventDispatchThread.run(EventDispatchThread.java:136)

E aqui no JDesktopFrame eu tenho um botão que abre um JInternalFrame num JPanel:

private void jAbrir(java.awt.event.ActionEvent evt) {
        paneAbrir.add(objInternalFrame); //paneAbrir = JPanel
        objInternalFrame.setVisible(true);
    }
ViniGodoy

Já tentou usar um depurador?

Se está acontecendo um nullpointer exception, com certeza você está passando null em algum lugar. Ou o paneAbrir está nulo, ou o objInternalFrame está nulo. Pelo tipo do erro, eu chutaria o segundo.

LarissaNepomuceno

Sim, sim. Eu também cheguei nessa conclusão… Mas o que seria um dos dois nulo??! Eu vi na classe JDesktopFrame que ao ser fechado um outro elemento ou minimizado, ele espera por outro… Seria isso?! Mas o que isso significa?
Ou é porque estou abrindo o JInternalFrame num JPanel?

ViniGodoy

Pode ser sim.
Você só deve adicionar JInternalFrames em JDesktopPanes.

LarissaNepomuceno

Ah que chato…
No caso eu tenho um JdesktopFrame, que se subdivide em dois JPanel…É Como se eu tivesse duas colunas…
Teria como fazer essa divisão sem usar o JPanel então?

ViniGodoy

Você pode colocar dois JDesktopPane sobre dois JPanel (e não os paineis sobre o desktoppane).

A restrição que o java tem é que sobre o JDesktopPane só podem ir internalframes.
E que o internalframe deve necessariamente estar num desktoppane.
Nada impede de ter mais de um desktoppane.

LarissaNepomuceno

Vini, vou tentar fazer isso aqui!

LarissaNepomuceno

Ou seja: daqui a pouco volto com mais dúvidas :wink:

LarissaNepomuceno

ViniGodoy:
Você pode colocar dois JDesktopPane sobre dois JPanel (e não os paineis sobre o desktoppane).

A restrição que o java tem é que sobre o JDesktopPane só podem ir internalframes.
E que o internalframe deve necessariamente estar num desktoppane.
Nada impede de ter mais de um desktoppane.

:wink:

Funcionou. Resolvido!

Criado 12 de janeiro de 2011
Ultima resposta 13 de jan. de 2011
Respostas 10
Participantes 2