Java 如何解决Swing GUI错误?

Java 如何解决Swing GUI错误?,java,swing,user-interface,jinternalframe,Java,Swing,User Interface,Jinternalframe,我正在开发一个swing应用程序,看起来一切都很好,但最近我在GUI方面遇到了一些问题。 问题是,当我在另一个JintenalFrame中打开JintenalFrame时,它工作正常,但当我再次打开它时,子JintenalFrame会失去控制,布局丢失或可能被破坏。我得到一些照片,可以清楚地解释问题: 这是第一个JinternalFrame,当我单击更新按钮时,第二个JinternalFrame显示在它的内部,如: 但当我关闭第二个并再次打开它时,问题如下所示: IDE会触发一个NPE,其

我正在开发一个swing应用程序,看起来一切都很好,但最近我在GUI方面遇到了一些问题。 问题是,当我在另一个JintenalFrame中打开JintenalFrame时,它工作正常,但当我再次打开它时,子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。

@Zakaria Marrah

  • 为弹出窗口创建
    JDialog
    ,为整个JVM实例创建一个
    JDialog
    ,通过假设在一瞬间只能看到一个弹出窗口,设置适当的
    JDialog.setDefaultCloseOperations(隐藏打开关闭)

  • 创建嵌套所有
    JComponents的
    JPanel

  • 添加/初始化
    XxxTableModel
    JTable
    ,错误编码的呈现器和空模型导致
    异常
    来自
    prepareRenderer
    ,用于所有harcoded链接、铸件、值比较,然后必须测试模型是否包含
    prepareRenderer
    中的数据,如果通过,则让渲染器中的任何内容都工作

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


  • 现在,您将只使用visibily for
    JDialog
    及其内容

  • 隐藏
    JDialog

  • 如果有几个视图,请使用
    CardLayout
    ,设置切换到正确的卡

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

  • 切勿在对象上重置、重新初始化或重新创建任何对象

  • 使用
    SwingWorker
    获取来自任何外部资源的数据,通过使用
    PropertyChangeListener
    进行侦听

  • done()
    中将
    process
    publish
    中的批处理值设置为
    JComponent
    s及其
    模型的值

  • 然后调用
    JDialog.pack()
    ,使用
    JDialog
    移动到屏幕上的适当坐标(相对于
    JComponents
    ),移动到
    ,然后显示
    JDialog
    包装在
    调用器(必需)


  • 要使生产代码使用
    Runnable#Thread
    ,但所有到Swing GUI的输出都必须包装到
    invokeLater
    ,您可以忽略为
    Swing声明的几个方法是线程安全的
    • @Zakaria Marrah

      • 为弹出窗口创建
        JDialog
        ,为整个JVM实例创建一个
        JDialog
        ,通过假设在一瞬间只能看到一个弹出窗口,设置适当的
        JDialog.setDefaultCloseOperations(隐藏打开关闭)

      • 创建嵌套所有
        JComponents的
        JPanel

      • 添加/初始化
        XxxTableModel
        JTable
        ,错误编码的呈现器和空模型导致
        异常
        来自
        prepareRenderer
        ,用于所有harcoded链接、铸件、值比较,然后必须测试模型是否包含
        prepareRenderer
        中的数据,如果通过,则让渲染器中的任何内容都工作

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


      • 现在,您将只使用visibily for
        JDialog
        及其内容

      • 隐藏
        JDialog

      • 如果有几个视图,请使用
        CardLayout
        ,设置切换到正确的卡

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

      • 切勿在对象上重置、重新初始化或重新创建任何对象

      • 使用
        SwingWorker
        获取来自任何外部资源的数据,通过使用
        PropertyChangeListener
        进行侦听

      • done()
        中将
        process
        publish
        中的批处理值设置为
        JComponent
        s及其
        模型的值

      • 然后调用
        JDialog.pack()
        ,使用
        JDialog
        移动到屏幕上的适当坐标(相对于
        JComponents
        ),移动到
        ,然后显示
        JDialog
        包装在
        调用器(必需)


      • 要使生产代码使用
        Runnable#Thread
        ,但所有到Swing GUI的输出都必须包装到
        invokeLater
        ,您可以忽略为
        Swing声明的几个方法是线程安全的

      plz粘贴你的帧间代码。我想看看你是如何创建jinternalframeStuff的,就像通常在事件调度线程(EDT)之外更新GUI一样。基本上,如果您在Swing的专用EDT之外的任何线程中进行更新,您不能保证它会工作。您的代码是否包含任何其他线程?请显示代码,但您是否设置了DISPOSE\u ON\u CLOSE选项???似乎您为表的一列指定了null呈现程序,或者表模型返回的一个列类为null。第二个帧应该是JDialog。任何弹出并按一下按钮就消失的东西都是迪奥洛格。第一帧应该是JPanel。你的申请应该