【问题标题】:NotSerializableException on GroupLayout, but no GroupLayout usedGroupLayout 上出现 NotSerializableException,但未使用 GroupLayout
【发布时间】:2018-11-25 20:35:32
【问题描述】:

我正在编写一段代码,我需要在其中扩展 JPanel,然后对其结果进行序列化。但是,在尝试对其进行序列化时,出现此错误:

java.io.NotSerializableException: javax.swing.GroupLayout

我要序列化的对象的代码如下:

public class NewJPanel extends javax.swing.JPanel
{

    /**
     * Creates new form NewJPanel
     */
    public NewJPanel()
    {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents()
    {
    }// </editor-fold>                        


    // Variables declaration - do not modify                     
    // End of variables declaration                   
}

尝试序列化一个普通的、非扩展的 JPanel 可以,但扩展的 JPanel 不行。如您所见,没有使用 GroupLayout,面板默认为 FlowLayout。即使明确设置它也不能阻止这一点。谁能告诉我为什么会发生这种情况以及如何解决或解决这个问题?

【问题讨论】:

  • initComponents() 方法中有代码,由您的 IDE 生成并使用 GroupLayout。展开方法,你会看到。不要序列化 ​​UI 小部件。序列化数据。并且不要将 Java 序列化用于长期存储。这是灾难的秘诀。
  • 如你所见,initCoponents() 方法被展开并且实际上是空的。如果可以的话,我会只序列化数据,但我序列化整个对象是此分配的要求之一。如果可以的话,我会和老师谈谈,但他不回复电子邮件,而且我们每周只见一次。
  • 所以您的面板不包含任何内容?使用任何其他文本编辑器(记事本、vi 等)打开此 Java 文件。
  • 正确。即使在 Notepad++ 中查看,它也不包含任何内容。如果有帮助,我使用的编译器是 Nebeans 8.2
  • 那么必须从外部设置面板的布局。如果您需要帮助,请发布一个完整的最小示例来重现该问题。

标签: java swing serialization


【解决方案1】:

事实证明,Netbeans 上的 JFrame 表单构建器偷偷将 JPanel 的布局管理器设置为 GroupLayout,当我将它放入 JFrame 时,而不是将其保留为我在 JPanel 代码中指定的布局,这是明智的。

【讨论】:

    猜你喜欢
    • 2013-08-14
    • 1970-01-01
    • 2021-04-20
    • 2015-09-13
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    相关资源
    最近更新 更多