获取 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 错误的主要内容,如果未能解决你的问题,请参考以下文章