JFC components cannot be serialized as Java Beans

XMLWordPrintable

    • Type: Bug
    • Resolution: Fixed
    • Priority: P3
    • 1.2.0
    • Affects Version/s: bdk_1.0, 1.1.4
    • Component/s: client-libs
    • None
    • swing0.7
    • x86, sparc
    • solaris_2.5.1, windows_95



      Name: rk38400 Date: 09/23/97


      Using the BeanBox on Win32, the following bean gives a trace.
      I think that the Swing component is holding a reference that should
      be transient.

      This causes a serialize exception, In the ActiveX
      bridge beta 4, this causes two dialogs to popup
      that state the bean cannot be serialzlized. The
      Dialogs cannot be dismissed.

      import com.sun.java.swing.*;

      public class TreeExample extends JPanel {
          public TreeExample() {
      super(true);
      setLayout(new BorderLayout());

      JTree tree = new JTree(new TreeNode("Not Quite A Bean"));

      JScrollPane scrollpane = new JScrollPane();
      scrollpane.getViewport().add(tree);

      add("Center", scrollpane);
          }
      }

      Default UI factory not set, using BasicFactory
      Copy failed
      java.io.NotSerializableException: com.sun.java.swing.basic.BasicScrollBarUI$Trac
      kListener
              at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:660)
              at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:225)
              at java.io.ObjectOutputStream.outputArray(ObjectOutputStream.java:637)
              at java.io.ObjectOutputStream.checkSpecialClasses(ObjectOutputStream.jav
      a:306)
              at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:182)
              at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java
      :325)
              at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:707)
              at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:225)
              at java.awt.AWTEventMulticaster.save(AWTEventMulticaster.java:657)
              at java.awt.Component.writeObject(Component.java:2344)
              at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:703)
              at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:225)
              at java.io.ObjectOutputStream.outputArray(ObjectOutputStream.java:637)
              at java.io.ObjectOutputStream.checkSpecialClasses(ObjectOutputStream.jav
      a:306)
              at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:182)
              at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java
      :325)
              at java.awt.Container.writeObject(Container.java:1151)
              at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:703)
              at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:225)
              at java.io.ObjectOutputStream.outputArray(ObjectOutputStream.java:637)
              at java.io.ObjectOutputStream.checkSpecialClasses(ObjectOutputStream.jav
      a:306)
              at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:182)
              at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java
      :325)
              at java.awt.Container.writeObject(Container.java:1151)
              at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:703)
              at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:225)
              at sun.beanbox.Wrapper.writeNakedBean(Wrapper.java:169)
              at sun.beanbox.BeanBox.copy(BeanBox.java:598)
              at sun.beanbox.BeanBox.doMenuItem(BeanBox.java:976)
              at sun.beanbox.BeanBox.run(BeanBox.java:1145)
              at java.lang.Thread.run(Thread.java:474)

      company - BroadVision, Inc , email - ###@###.###
      ======================================================================
      ronan.mandel@Eng 1997-12-02

      Here's another one, although not a bean issue

      1. compile the following source code SimpleExample2.java
      2. run it
      3. choose Save menuitem from the Menu File
      4. java.io.NotSerializableException shows

      This problem is very critical to us, please help us to sovle the problem soon.


      //-----------Start the source code ----------

      import com.sun.java.swing.*;
      import com.sun.java.swing.event.*;

      import java.awt.*;
      import java.awt.event.*;
      import java.io.*;

      public class SimpleExample2 extends JPanel
      {
          //The Frame
          public static Frame frame;

          //The MenuBar
          public static MenuBar menuBar = null;

          public static SimpleExample2 example = null;

          public SimpleExample2()
          {
              super(true);

              String tabs[] = {"Page 1", "Page 2", "Page 3"};

              // Create a TabbedPane
              JTabbedPane tpane = new JTabbedPane();
              setLayout(new BorderLayout());
              for (int i = 0; i < tabs.length; i++)
                  tpane.addTab(tabs[i], null, createPane(tabs[i]));
              tpane.setSelectedIndex(0);
              add(tpane);
          }

          JPanel createPane(String s) {
              JPanel p = new JPanel();
              p.add(new JLabel(s));
              return p;
          }

          MenuBar createMenuBar()
          {
              menuBar = new MenuBar();

              //File Menu
              Menu file = new Menu("File");
              MenuItem saveItem = new MenuItem("Save");
              saveItem.addActionListener(new ActionListener()
              {
                  public void actionPerformed(ActionEvent e) {
                      savePanel();
                  }
              }
              );

              MenuItem exitItem = new MenuItem("Exit");
              exitItem.addActionListener(new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                      System.exit(0);
                  }
              }
                    );
       
              file.add(saveItem);
              file.add(exitItem);
       
              menuBar.add(file);
        
              return menuBar;
          }
       
       
          public void savePanel()
          {
              System.out.println("SavePanel called ");
       
              try {
                  FileOutputStream f = new FileOutputStream("test.pres");
                  ObjectOutput s = new ObjectOutputStream(f);
                  s.writeObject(example);
                  s.flush();
                  s.close();
              } catch (IOException e) {
                  System.err.println("Failed to save a Panel to file ");
                  e.printStackTrace();
              }
          }
       
          public static void main(String[] args)
          {
              frame = new Frame("SimpleExample2");
              frame.setSize(400, 300);
              frame.add("Center", example = new SimpleExample2());
              frame.setMenuBar(example.createMenuBar());
              frame.setVisible(true);
          }
       
      }
       

      //----- end of source code --------

            Assignee:
            Swingtraq Swingtraq (Inactive)
            Reporter:
            Ralph Kar (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: