Я работаю над проектом, который использует JavaFX для GUI (я знаю, не сериализуемый). Я хочу сериализовать объекты, такие как мои пользователи.
Я не могу получить доступ к экземпляру, который использует приложение JavaFX, но он связан с другими классами.
Например - это связано с моим классом контроллера:
public class MyApp extends Application {
public void start(Stage stage){
// ... assume controller loaded
controller.setApp(this);
}
}
public class Controller {
MyApp app;
public setApp(MyApp app){
this.app = app
}
}
Теперь, когда я иду сериализовать экземпляр MyApp, у меня возникают трудности. Я нашел небольшой трюк (вариант 1), но он выглядит немного грязно. Я бы предпочел сделать вариант 2.
Вариант 1 [РАБОТЫ] - создать дополнительный экземпляр в методе main.
public class MyApp extends Application {
public void start(Stage stage){
// ... assume controller loaded
controller.setApp(this);
}
public static void main(String[] args){
MyApp app = new MyApp(); // this is a different instance than javafx instance.
launch(args)
app.users = Controller.getUsers();
writeApp(app);
}
public static void writeApp(PhotoApp photoApp) throws IOException {
ObjectOutputStream oos = new ObjectOutputStream(new
FileOutputStream(storeDir + File.separator + storeFile));
oos.writeObject(photoApp);
oos.close();
}
}
Таким образом, вариант 1 по существу создает новый экземпляр и копирует материал назад и вперед из фактического экземпляра в controller
.
ВАРИАНТ 2 [НЕ РАБОТАЕТ] - сериализовать экземпляр, связанный с контроллером (поскольку это фактический экземпляр, который используется JavaFX)
public class Controller {
MyApp app;
public void setApp(MyApp app){
this.app = app
}
public void someAction(){
MyApp.writeApp(this.app);
}
}
Когда я делаю Вариант 2 Я получаю сообщения об ошибках Controller is not serializable
. Я понимаю, что это не так (что нормально), но я не получаю эту ошибку в Вариант 1 . В обоих вариантах я вызываю один и тот же метод с некоторым экземпляром MyApp. Я не уверен, почему это работает для Вариант 1 , но не Вариант 2 .
Любая причина, почему один вариант работает над другим? Как большинство людей выполняют сериализацию некоторых своих объектов при использовании JavaFX?