【问题标题】:Problem in JFileChooserJFileChooser 中的问题
【发布时间】:2011-06-13 13:07:57
【问题描述】:

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

smiliar error message to mine

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

java.io.NotSerializableException: javax.swing.plaf.metal.MetalFileChooserUI 在 java.io.ObjectOutputStream.writeObject0(未知来源) 在 java.io.ObjectOutputStream.defaultWriteFields(未知来源) 在 java.io.ObjectOutputStream.writeSerialData(未知来源) 在 java.io.ObjectOutputStream.writeOrdinaryObject(未知来源) 在 java.io.ObjectOutputStream.writeObject0(未知来源) 在 java.io.ObjectOutputStream.writeObject(未知来源) 在 javax.swing.ArrayTable.writeArrayTable(未知来源) 在 javax.swing.ActionMap.writeObject(未知来源) 在 sun.reflect.GeneratedMethodAccessor11.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 java.io.ObjectStreamClass.invokeWriteObject(未知来源) 在 java.io.ObjectOutputStream.writeSerialData(未知来源) 在 java.io.ObjectOutputStream.writeOrdinaryObject(未知来源) 在 java.io.ObjectOutputStream.writeObject0(未知来源) 在 java.io.ObjectOutputStream.defaultWriteFields(未知来源) 在 java.io.ObjectOutputStream.defaultWriteObject(未知来源) 在 javax.swing.JComponent.writeObject(未知来源) 在 sun.reflect.GeneratedMethodAccessor10.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 java.io.ObjectStreamClass.invokeWriteObject(未知来源) 在 java.io.ObjectOutputStream.writeSerialData(未知来源) 在 java.io.ObjectOutputStream.writeOrdinaryObject(未知来源) 在 java.io.ObjectOutputStream.writeObject0(未知来源) 在 java.io.ObjectOutputStream.defaultWriteFields(未知来源) 在 java.io.ObjectOutputStream.writeSerialData(未知来源) 在 java.io.ObjectOutputStream.writeOrdinaryObject(未知来源) 在 java.io.ObjectOutputStream.writeObject0(未知来源) 在 java.io.ObjectOutputStream.defaultWriteFields(未知来源) 在 java.io.ObjectOutputStream.defaultWriteObject(未知来源) 在 javax.swing.JList.writeObject(未知来源) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 java.io.ObjectStreamClass.invokeWriteObject(未知来源) 在 java.io.ObjectOutputStream.writeSerialData(未知来源) 在 java.io.ObjectOutputStream.writeOrdinaryObject(未知来源) 在 java.io.ObjectOutputStream.writeObject0(未知来源) 在 java.io.ObjectOutputStream.defaultWriteFields(未知来源) 在 java.io.ObjectOutputStream.writeSerialData(未知来源) 在 java.io.ObjectOutputStream.writeOrdinaryObject(未知来源) 在 java.io.ObjectOutputStream.writeObject0(未知来源) 在 java.io.ObjectOutputStream.defaultWriteFields(未知来源) 在 java.io.ObjectOutputStream.defaultWriteObject(未知来源) 在 java.awt.Window.writeObject(未知来源) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 java.io.ObjectStreamClass.invokeWriteObject(未知来源) 在 java.io.ObjectOutputStream.writeSerialData(未知来源) 在 java.io.ObjectOutputStream.writeOrdinaryObject(未知来源) 在 java.io.ObjectOutputStream.writeObject0(未知来源) 在 java.io.ObjectOutputStream.writeObject(未知来源) 在 java.awt.Window.writeObject(未知来源) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源) 在 java.lang.reflect.Method.invoke(未知来源) 在 java.io.ObjectStreamClass.invokeWriteObject(未知来源) 在 java.io.ObjectOutputStream.writeSerialData(未知来源) 在 java.io.ObjectOutputStream.writeOrdinaryObject(未知来源) 在 java.io.ObjectOutputStream.writeObject0(未知来源) 在 java.io.ObjectOutputStream.writeObject(未知来源) 在ver_2.sudoku_GUI.actionPerformed(sudoku_GUI.java:90) 在 javax.swing.AbstractButton.fireActionPerformed(未知来源) 在 javax.swing.AbstractButton$Handler.actionPerformed(未知来源) 在 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(未知来源) 在 java.awt.Component.processMouseEvent(未知来源) 在 javax.swing.JComponent.processMouseEvent(未知来源) 在 java.awt.Component.processEvent(未知来源) 在 java.awt.Container.processEvent(未知来源) 在 java.awt.Component.dispatchEventImpl(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.LightweightDispatcher.retargetMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.processMouseEvent(未知来源) 在 java.awt.LightweightDispatcher.dispatchEvent(未知来源) 在 java.awt.Container.dispatchEventImpl(未知来源) 在 java.awt.Window.dispatchEventImpl(未知来源) 在 java.awt.Component.dispatchEvent(未知来源) 在 java.awt.EventQueue.dispatchEvent(未知来源) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.run(未知来源)

【问题讨论】:

  • 你到底想序列化什么? JFileChooser 对象本身?
  • 谢谢大家,可能我没有把问题描述清楚,我使用JFileChooser 来获取我想要保存到的文件,然后使用ObjectOutputStream 将我已经序列化的类写入所选文件.出现错误,我只是想知道为什么会这样,因为 ObjectOutputStream 与 JFilechooser 无关。我想先尝试transient。感谢科斯蒂丘达图。 :)

标签: java swing serialization jfilechooser


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-20
      • 2015-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 1970-01-01
      相关资源
      最近更新 更多