【发布时间】: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