몇개의 JInternalFrames를 가지는 JDesktopPane를 포함한 JFrame를 직렬화하려고하고 있습니다. CrossPlatform LnF와 다른 Swing 구성 요소를 직렬화 할 수 없기 때문에 LookAndFeel에 문제점이 발생했습니다. 그래서 나는 나의 possibilites을 파악하기 위해이 테스트 프로그램을 작성 :LookAndFeel을 사용한 JFrame 직렬화
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();
}
}
이 두 가지 이유로 작동하지 않았다 :
- 나는 프레임과 포함 된 트리를 직렬화 할 수 없습니다입니다. 그냥 나무 괜찮아요하지만 때 그냥
- 내가 먼저 LookAndFeel 크로스 플랫폼을 설정하고 나중에 내 나무를 만듭니다.
어떤 문제 해결 방법이 있습니까?
편집 : 이 부분을 분명히하기 위해 죄송합니다. LnF 또는 이와 비슷한 것을 직렬화하려고하지 않습니다. LnF가 프레임을 serialize하지 못했습니다.
java.io.NotSerializableException: com.apple.laf.AquaTreeUI
그리고 그 위에
내가 나무를 포함하는 프레임을 직렬화 할 수 없습니다입니다.Exception in thread "AWT-EventQueue-0" java.lang.InternalError: incorrect component
JDesktopPane 구현에는 직렬화 할 수없는 일부 LnF 구성 요소가 포함될 가능성이 큽니다. 일반적으로 관심있는 상태를 다른 방식으로 저장하는 것이 좋습니다. 저장 상태에 따라 UI를 다시 작성하는 코드를 작성하는 것이 좋습니다. – technomage
왜 Swing 구성 요소를 직렬화 하시겠습니까? 재앙을위한 조리법처럼 들립니다. – Charlie