java - 使用 LookAndFeel 进行 JFrame 序列化

标签 java swing serialization look-and-feel

我正在尝试序列化包含 JDesktopPane 和多个 JInternalFrame 的 JFrame。 我遇到了 LookAndFeel 的问题,因为无论出于何种原因,都不可能将 Swing 组件与 CrossPlatform LnF 不同的组件序列化。 所以我编写了这个测试程序来找出我的可能性:

public static void main(String[] args) {    
    try {
        JFrame f = new JFrame();
        f.setBounds(200,200,200,200);
        JTree tree = new JTree();
        f.add(tree);
        f.setVisible(true);

        UIManager.setLookAndFeel(
                   UIManager.getCrossPlatformLookAndFeelClassName());
        SwingUtilities.updateComponentTreeUI(f);

        ObjectOutputStream oop = new ObjectOutputStream(
                   new FileOutputStream(new File("test.serialized")));
        oop.writeObject(f);
    } catch(IOException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InstantiationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (UnsupportedLookAndFeelException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

这不起作用有两个原因:

  1. 我无法序列化框架和包含的树。只是树很好,但只是当
  2. 我首先将 LookAndFeel 设置为跨平台,然后创建我的树。

知道如何解决这个问题吗?

编辑: 抱歉,没有说清楚: 我并不是想序列化 LnF 或类似的东西。 LnF 不希望我序列化 Frame。

java.io.NotSerializableException: com.apple.laf.AquaTreeUI

最重要的是,我无法序列化包含树的框架。

Exception in thread "AWT-EventQueue-0" java.lang.InternalError: incorrect component

最佳答案

你正在尝试的是不可能的。当您序列化 JFrame 对象时,LnF 不会以任何方式序列化。这是因为 JFrame 不保留这一点。 LnF 所使用的内容存储在其他地方......

我要做的是将 JFrame 包装在另一个对象中,比如说 MyGUI。在其中,我会将 LnF (例如作为字符串)存储在私有(private)字段中。最后,序列化 MyGUI,在反序列化时,您的 LnF 完好无损,您可以再次设置它。

关于java - 使用 LookAndFeel 进行 JFrame 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8991465/

相关文章:

Java : Is generic method only with static?

java - JPanel 上的文本页面

c++ - 缓冲区到结构的转换

java - 更改字体时 JTabbedPane 选项卡标题保留填充

C++ Boost 序列化 boost::archive_exception: 输出流错误

c# - 发生类型为 'System.AccessViolationException' 的未处理异常

java - 在时间选择器中限制时间范围

java - 浏览器未向 weblogic 服务器发送正确的 jsessionId?

具有多个聚合的 Java 8 流分组依据

java - 如何增加 JRadioButtons 和 JCheckBoxes 的大小?