0

我想使用 JfileChooser 选择一个文件并将对象写入所选文件或从所选文件中读取对象。我已经序列化了我的课程,但我不知道如何序列化这个MetalFileChooserUI?还是我需要这样做?非常感谢你。

给我的错误信息

有人可以帮我找到解决方案吗?谢谢你。我的错误信息:

java.io.NotSerializableException: java.io.ObjectOutputStream.writeObject0(Unknown Source) 处的 javax.swing.plaf.metal.MetalFileChooserUI java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) 处 java.io.ObjectOutputStream.writeSerialData(Unknown Source) ) 在 java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 在 java.io.ObjectOutputStream.writeObject0(Unknown Source) 在 java.io.ObjectOutputStream.writeObject(Unknown Source) 在 javax.swing.ArrayTable.writeArrayTable(Unknown Source) 在javax.swing.ActionMap.writeObject(Unknown Source) at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at java.io.ObjectStreamClass。在 java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 在 java.io.ObjectOutputStream.writeObject0(Unknown Source) 在 java.io.ObjectOutputStream.defaultWriteFields( Unknown Source) at java.io.ObjectOutputStream.defaultWriteObject(Unknown Source) at javax.swing.JComponent.writeObject(Unknown Source) at sun.reflect.GeneratedMethodAccessor10.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source ) 在 java.io.ObjectOutputStream.writeSerialData(Unknown Source) 在 java.io.ObjectOutputStream 的 java.io.ObjectStreamClass.invokeWriteObject(Unknown Source) 在 java.lang.reflect.Method.invoke(Unknown Source)。writeOrdinaryObject(Unknown Source) at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) at java.io.ObjectOutputStream.writeSerialData(Unknown Source) at java.io.ObjectOutputStream.writeOrdinaryObject( Unknown Source) at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) at java.io.ObjectOutputStream.defaultWriteObject(Unknown Source) at javax.swing.JList.writeObject(Unknown Source ) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 在 java.lang.reflect.Method.invoke(Unknown Source) ) 在 java.io。ObjectStreamClass.invokeWriteObject(Unknown Source) at java.io.ObjectOutputStream.writeSerialData(Unknown Source) at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream。 java.io.ObjectOutputStream.writeSerialData(Unknown Source) at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.defaultWriteFields( Unknown Source) 在 java.io.ObjectOutputStream.defaultWriteObject(Unknown Source) 在 java.awt.Window.writeObject(Unknown Source) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl。在 sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 在 java.lang.reflect.Method.invoke(Unknown Source) 在 java.io.ObjectStreamClass.invokeWriteObject(Unknown Source) 在 java.io.ObjectOutputStream.invoke(Unknown Source)。 writeSerialData(Unknown Source) at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.writeObject(Unknown Source) at java.awt.Window.writeObject(未知源)在 sun.reflect.NativeMethodAccessorImpl.invoke0(本地方法)在 sun.reflect.NativeMethodAccessorImpl.invoke(未知源)在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源)在 java.lang.reflect.Method.invoke(未知来源)在 java.io.ObjectStreamClass。invokeWriteObject(Unknown Source) at java.io.ObjectOutputStream.writeSerialData(Unknown Source) at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.writeObject( Unknown Source) at ver_2.sudoku_GUI.actionPerformed(sudoku_GUI.java:90) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed (未知源)在 javax.swing.DefaultButtonModel.setPressed(未知源) 在 javax.swing.AbstractButton.doClick(未知源) 在 javax.swing.plaf.basic.BasicMenuItemUI.doClick(未知源) 在 javax.swing.plaf .basic.BasicMenuItemUI$Handler。mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent( Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) ) 在 java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 在 java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 在 java.awt.Container.dispatchEventImpl(Unknown Source) 在 java.awt.Window.dispatchEventImpl(Unknown Source) 在java.awt.组件。dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy( Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) 的 pumpEvents(Unknown Source)java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) 的 pumpEvents(Unknown Source)

4

2 回答 2

2

如果您实际上不想序列化 JFileChooser,但您只是在您的某个类(您需要序列化)中有对它的引用,请进行该引用transient,以便序列化过程将简单地忽略它。

于 2011-01-22T03:10:56.970 回答
2

我不确定您为什么要序列化文件选择器,因为这有什么意义?我认为您最好的选择是不要序列化程序的 gui 部分,而是序列化模型中保存的数据(假设 MVC 结构)——除非您有我们需要了解的要求。

于 2011-01-22T03:34:01.983 回答