Возможно ли сериализовать исполняемый объект в 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);
Stack trace:
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)
Runnable создание:
EventManager.addAction(new Action(false, EventManager.ON_EVENT_X,
new SerializableRunnable()
{
@Override
public void run()
{
// Do whatever
}
}));
Заранее спасибо
EDIT: добавлены примеры код
EDIT2: добавлена стек трассировка
EDIT3: добавлена работоспособное создание
Да, вы можете. Убедитесь, что ваш класс реализует как Runnable, так и Serializable. Вы можете сохранить объект в файл с помощью ObjectOutputStream и восстановить с помощью ObjectInputStream. Но я бы сохранил объект, который содержит какое-то состояние или информацию. –
Что должно удержать вас от сериализации любого объекта? – JimmyB
В зависимости от _why_ вы хотите сохранить объект, может быть проще написать 'class', чтобы хранить только данные и сериализовать их. Затем сделайте свой «Runnable» использовать этот класс данных. –