gpt4 book ai didi

java - 使用 LookAndFeel 进行 JFrame 序列化

转载 作者:行者123 更新时间:2023-12-02 08:00:16 25 4
gpt4 key购买 nike

我正在尝试序列化包含 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/

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