0

我正在开发一个摇摆应用程序,一切似乎都运行良好,但最近我遇到了一些 GUI 问题。问题是,当我在另一个内部打开 JinternalFrame 时,它​​工作正常,但是当我再次打开它时,子 JintenalFrame 失去了对自身的控制,布局丢失或可能被破坏,我得到了一些可以清楚地解释问题的照片:

在此处输入图像描述

这是第一个 JinternalFrame,当我单击更新按钮时,第二个出现在其中,如下所示:

在此处输入图像描述

但是当我关闭第二个并再次打开它时,问题看起来像这样: 在此处输入图像描述

IDE 触发 NPE 提及:

Hibernate: select modalite0_.id_mod as id1_6_, modalite0_.libele as libele6_ from   
Modalite modalite0_
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.JTable.prepareRenderer(JTable.java:5735)
at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2114)
at javax.swing.plaf.basic.BasicTableUI.paintCells(BasicTableUI.java:2016)
at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1812)
at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
at javax.swing.JComponent.paintComponent(JComponent.java:778)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JViewport.paint(JViewport.java:731)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:585)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)

所以我问是否有办法追踪这个错误?

我使用 Netbeans7.2 作为 jre 7 的 ide。

4

1 回答 1

3

@Zakaria Marrah

  • JDialog为弹出窗口创建JDialog,整个JVM实例只有一个,假设在某一时刻只能看到一个弹出窗口,设置正确JDialog.setDefaultCloseOperations(HIDE_ON_CLOSE)

  • 创建JPanel嵌套的所有JComponents

  • 添加/初始化XxxTableModelJTable,错误编码的渲染器和空模型导致exceptions所有prepareRenderer硬编码链接,铸件,值比较,然后必须测试模型是否包含数据,prepareRenderer如果通过,然后让渲染器中的任何东西工作

  • 错误编码renderer以及 EDT 之外的更新导致prepareRenderer所有硬编码链接、铸件、值比较的异常,


  • 现在你将只玩可见的 forJDialog及其内容

  • 隐藏JDialog

  • 在视图少的情况下使用CardLayout,设置,切换到合适的卡片,

  • 从 (s)中删除所有值JComponent,或从 (s) 中删除所有数据model

  • 永远不要在对象上重置、重新初始化或重新创建任何对象,

  • 用于SwingWorker来自任何外部源的数据,通过 using 监听PropertyChangeListener必须测试,exceptions by using get()在 done()中检查

  • 将值(或通过使用批处理 in process, publishdone()设置为JComponents,它model的 s

  • 然后调用JDialog.pack(),移动JDialog到屏幕上的正确坐标(相对于JComponents),移动到Point,然后显示JDialog包裹在invokeLater(required)


  • 用于生产代码Runnable#Thread,但是所有到 Swing GUI 的输出都必须被包装到invokeLater,你可以忽略一些方法被声明为Swing as thread safe
于 2013-03-15T13:43:51.957 回答