获取 java.io.NotSerializableException 错误

Posted

技术标签:

【中文标题】获取 java.io.NotSerializableException 错误【英文标题】:Getting java.io.NotSerializableException error 【发布时间】:2018-08-17 08:05:18 【问题描述】:

我想保存一个对象

 javafx.scene.media.MediaPlayer 

使用 ObjectOutputStream 的类,但它只适用于可序列化的类,而且看起来 MediaPlayer 类不可序列化。

这是我的代码:

 ObjectOutputStream objectOutputStream = new ObjectOutputStream(
                new BufferedOutputStream(new FileOutputStream(file)));

        MediaPlayer[] player = songList.toArray(new MediaPlayer[songList.size()]);

        objectOutputStream.writeObject(player); // error occurs here

        objectOutputStream.close();

我得到这个错误:

java.io.NotSerializableException: javafx.scene.media.MediaPlayer
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeArray(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at mp3.MusicPlayer.saveSongs(MusicPlayer.java:72)
at mp3.MainFrame$1.windowClosing(MainFrame.java:55)

如何解决这个问题?

【问题讨论】:

【参考方案1】:

这里最好的问题是你为什么要首先保存它。考虑到 MediaPlayer 是一个 JavaFx 组件,我看不出想要序列化并保存它的原因。

假设您想要实现的是保存您传入的歌曲列表,我会继续这样做。

序列化和保存像MediaPlayer 这样的对象是没有意义的,只需保存歌曲列表和/或任何设置。然后,如果您可以在其他地方重建它,只需反序列化保存的数据并用它们重建一个新的 MediaPlayer 实例。

【讨论】:

我认为这会起作用,但不幸的是它无法完成,因为 songList 包含未序列化的 MediaPlayer,因此错误仍然存​​在。 所以在这种情况下你的实现是错误的。将 MediaPlayer 与您的实际数据分离。他们应该独立于它。 有没有办法在java中保存未序列化的对象?也许其他方式代替 objectOutputStream。 Javadoc 你能给出答案吗:docs.oracle.com/javase/tutorial/jndi/objects/serial.html 但我还是不明白沿着这条路走下去有什么意义。

以上是关于获取 java.io.NotSerializableException 错误的主要内容,如果未能解决你的问题,请参考以下文章

java反射获取属性值

Shell 获取路径

iOS 获取文件大小

根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期

js如何获取时间点?

iOS 获取设备的各种信息的方法