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:
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:
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
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.