【问题标题】:Getting java.io.NotSerializableException error获取 java.io.NotSerializableException 错误
【发布时间】: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)

如何解决这个问题?

【问题讨论】:

    标签: java file media-player serializable objectoutputstream


    【解决方案1】:

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

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

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

    【讨论】:

    • 我认为这会起作用,但不幸的是它无法完成,因为 songList 包含未序列化的 MediaPlayer,因此错误仍然存​​在。
    • 所以在这种情况下你的实现是错误的。将 MediaPlayer 与您的实际数据分离。他们应该独立于它。
    • 有没有办法在java中保存未序列化的对象?也许其他方式代替 objectOutputStream。
    • Javadoc 你能给出答案吗:docs.oracle.com/javase/tutorial/jndi/objects/serial.html 但我还是不明白沿着这条路走下去有什么意义。
    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    • 2020-03-13
    • 2013-04-10
    • 1970-01-01
    • 2011-11-22
    相关资源
    最近更新 更多