Я бы попытался добавить вызов метода pack в кадре перед вызовом setVisible . Это должно сделать его отображаемым и иметь правильный размер.
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);
Если это не работает, проверьте возвращаемое значение f2.isDisplayable () после вызова pack . Если значение равно false, это означает, что фрейм не подключен к собственному экранному ресурсу (о котором, я думаю, pack должен позаботиться, но я не уверен в этом в сценарии десериализации).
Другая проблема может заключаться в несовместимости между JVM, которая сериализовала кадр, и той, которая десериализует его, если кадр включает компоненты Swing. В javadocs для компонентов Swing есть предупреждения о переключении версий JVM при использовании для них сериализации.
В общем, если у вас есть выбор в отношении сериализации чего-либо, это должна быть только модель данных, а не уровень представления / представления / графического интерфейса. Так что, если это вариант, я бы полностью избежал вашего текущего подхода к реализации.