我正在开发一个 Swing 应用程序,一切似乎都运行良好,但最近我遇到了一些 GUI 问题。 问题是,当我在另一个框架中打开 JinternalFrame 时,它工作正常,但是当我再次打开它时,子 JintenalFrame 失去了对自身的控制,布局丢失或可能被破坏,我得到了一些可以清楚解释问题的照片:
这是第一个 JinternalFrame,当我单击更新按钮时,第二个 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。
最佳答案
@扎卡里亚·马拉赫
为弹出窗口创建
JDialog
,整个JVM实例只有一个JDialog
,假设某一时刻只能看到一个弹出窗口,设置合适JDialog.setDefaultCloseOperations(HIDE_ON_CLOSE)
创建嵌套所有
JComponents
的JPanel
将
XxxTableModel
添加/初始化到JTable
,错误编码的渲染器和空模型导致prepareRenderer
发生异常
code> 对于所有编码链接、转换、值比较,然后必须测试模型是否包含prepareRenderer
内的数据(如果通过),则让渲染器中的任何内容正常工作错误编码的
<renderer
以及 EDT 之外的更新导致prepareRenderer
的所有硬编码链接、转换、值比较出现异常,
现在您只能使用
JDialog
及其内容的可见性隐藏
JDialog
,在有几个 View 的情况下使用
CardLayout
,设置切换到正确的卡片,从
JComponent
中删除所有值,或从model
中删除所有数据,切勿重置、重新初始化或重新创建任何对象,
使用
SwingWorker
获取来自任何外部源的数据,并使用PropertyChangeListener
进行监听,have to test, to check forexceptions by using get()
in done()在
done()
中将值(或通过在process
、publish
中使用批处理)设置为JComponent
s,其模型
s然后调用
JDialog.pack()
,使用JDialog
移动到屏幕上的正确坐标(相对于JComponents
),到Point
,然后显示包裹在invokeLater(required)
中的
JDialog
- 生产代码要使用
Runnable#Thread
,但所有到 Swing GUI 的输出都必须包装到invokeLater
中,您可以忽略声明的一些方法Swing 是线程安全的
关于java - 如何解决 Swing GUI 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15431674/