我正在一个使用JavaFX作为GUI的项目(我知道,不可序列化)。我想序列化诸如“用户”之类的对象。
我无法访问JavaFX Application使用的实例,但是我将其与其他类相关联。
例如-它与我的Controller类关联:
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 [WORKS] -在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时如何对他们的某些对象进行序列化?