Java 不确定从ObjectInputStream()加载后如何获取要显示的对象

Java 不确定从ObjectInputStream()加载后如何获取要显示的对象,java,swing,serialization,streaming,Java,Swing,Serialization,Streaming,我会尝试在setVisible调用之前在框架上添加对pack方法的调用。这将使其能够正确显示和调整大小 public void load() { final JFileChooser fc = new JFileChooser(); int returnVal = fc.showOpenDialog(this); if(returnVal == JFileChooser.APPROVE_OPTION) { try{ File

我会尝试在setVisible调用之前在框架上添加对pack方法的调用。这将使其能够正确显示和调整大小

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){
        }
    }
}
如果这不起作用,则在调用pack后检查f2.isDisplayable()的返回值。如果为false,则意味着该帧未连接到本机屏幕资源(我认为pack应该负责这一点,但在反序列化场景中我不确定这一点)

另一个问题可能是序列化框架的JVM与反序列化框架(如果框架包含Swing组件)的JVM之间不兼容。在javadocs中,Swing组件在使用序列化时会出现关于切换JVM版本的警告


通常,如果您可以选择序列化任何内容,那么它应该是数据模型,而不是视图/表示/GUI层。因此,如果这是一个选项,我将完全避免您当前的实现方法。

某种异常处理,只要
抛出新错误(exc)就好了。你确定你真的在创建实例吗?首先,你为什么要在文件中存储一个框架对象?
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);