gpt4 book ai didi

java - 不确定如何在从 ObjectInputStream() 加载后显示对象

转载 作者:行者123 更新时间:2023-11-30 11:58:41 25 4
gpt4 key购买 nike

public void load()
{
final JFileChooser fc = new JFileChooser();
int returnVal = fc.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION)
{
try{
FileInputStream f_in = new FileInputStream(fc.getSelectedFile());
ObjectInputStream obj_in = new ObjectInputStream(f_in);
Frame f2 = (Frame)obj_in.readObject();
obj_in.close();
f2.setVisible(true);
}
catch(Exception ex){
}
}
}

最佳答案

我会尝试在 setVisible 调用之前在框架上添加对 pack 方法的调用。这应该使其可显示且大小合适。

FileInputStream f_in = new FileInputStream(fc.getSelectedFile());
ObjectInputStream obj_in = new ObjectInputStream(f_in);
Frame f2 = (Frame)obj_in.readObject();
obj_in.close();
f2.pack()
f2.setVisible(true);

如果这不起作用,则在调用 pack 后检查 f2.isDisplayable() 的返回值。如果它为 false,则意味着框架未连接到 native 屏幕资源(我相信 pack 应该处理,但在反序列化场景中我不确定这一点)。

如果框架包含 Swing 组件,则另一个问题可能是序列化框架的 JVM 与反序列化它的 JVM 之间的不兼容。 Swing 组件的 javadoc 中有关于在对它们使用序列化时切换 JVM 版本的警告。

一般来说,如果您可以选择序列化任何东西,它应该只是数据模型,而不是 View /表示/GUI 层。因此,如果可以的话,我会完全避免使用您当前的实现方法。

关于java - 不确定如何在从 ObjectInputStream() 加载后显示对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3034554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com