Java 序列化可运行对象

Java 序列化可运行对象,java,serialization,runnable,Java,Serialization,Runnable,可以在java6中序列化可运行对象吗? 我想将可运行对象存储到一个文件中 如果没有,是否有其他方法来实现这一点 我有这门课: public abstract class SerializableRunnable implements Serializable, Runnable { private static final long serialVersionUID = 6217172014399079306L; @Override public abstract v

可以在java6中序列化可运行对象吗? 我想将可运行对象存储到一个文件中

如果没有,是否有其他方法来实现这一点

我有这门课:

public abstract class SerializableRunnable implements Serializable, Runnable
{

    private static final long serialVersionUID = 6217172014399079306L;

    @Override
    public abstract void run();

}
然后我有另一个类,它包含上一个类:

public class Action implements Serializable
{
    ...
    private SerializableRunnable m_runnable;

    @Override
    public void Write(DataOutputStream dout) throws IOException
    {
        ...
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(m_runnable);
        oos.close();

        byte[] m_runnableBytes = baos.toByteArray();
        dout.writeInt(m_runnableBytes.length);
        dout.write(m_runnableBytes);
    }
...
}
问题是我在这行代码中得到了一个java.io.NotSerializableException

oos.writeObject(m_runnable);
堆栈跟踪:

java.io.NotSerializableException:
  [r]   at java.io.ObjectOutputStream.writeObject0(Unknown Source)
  [r]   at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
  [r]   at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
  [r]   at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
  [r]   at java.io.ObjectOutputStream.writeObject0(Unknown Source)
  [r]   at java.io.ObjectOutputStream.writeObject(Unknown Source)
  [r]   at mypackage.Action.Write(Action.java:52)
可运行创建:

EventManager.addAction(new Action(false, EventManager.ON_EVENT_X, 
    new SerializableRunnable()
    {
         @Override
         public void run()
         {
             // Do whatever
         }
    }));
提前谢谢

编辑:添加示例代码
EDIT2:添加堆栈跟踪

EDIT3:添加了可运行的创建

谢谢大家的评论


这个问题与@KDM所说的有关。该类不是真正可序列化的可运行类,而是一个匿名类,因此封闭类也必须是可序列化的。

可以。确保类同时实现了可运行和可序列化。您可以使用ObjectOutputStream将对象存储到文件中,并使用ObjectInputStream进行恢复。但是我会保存一个包含一些状态或信息的对象。什么会阻止你序列化任何对象?你能提供堆栈跟踪吗?m_runnable的具体对象可能包含不可序列化的字段。代码中有一些注释。1) 没有必要重新声明尚未实现的
抽象
方法。2) 始终使用
try with resources
,您的示例代码是一个经典案例-因为
writeObject
引发异常,
OutputStream
从未关闭。@omniyo是您自己的Java文件中的
SerializableRunnable
类还是嵌套类?