ADDITIONAL SYSTEM INFORMATION : I could reproduce the bug on Ubuntu 20.04 with the following JDKs 15, 14, 11 and 9: OpenJDK 15-ea build 15-ea+24-1168 , Oracle JDK 14.0.1, OpenJDK 11.0.7, OpenJDK 9 build 9+181 I could reproduce the bug on Windows 10 build 1909 with the following JDKs 14 and 9: Oracle JDK 14.0.1, OpenJDK 9 build 9+181 However, with JDK 8 everything went fine. I've checked it on Win10 with OpenJDK 1.8.0_41 and on Ubuntu 20.04 with OpenJDK 1.8.0_252. A DESCRIPTION OF THE PROBLEM : When I want to deserialize a serialized JTabbedPane-object, I get a NullPointerException. I use ObjectInputStream.readObject() for deserializing the JTabbedPane instance. REGRESSION : Last worked in version 8u251 STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : Just compile and run the following code in Bee.java: javac Bee.java java -cp . Bee EXPECTED VERSUS ACTUAL BEHAVIOR : EXPECTED - Output of the toString() method of the deserialized JTabbedPane as with JDK 8: readPane: javax.swing.JTabbedPane[,0,0,0x0,invalid,layout=javax.swing.plaf.metal.MetalTabbedPaneUI$TabbedPaneLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=352,maximumSize=,minimumSize=,preferredSize=,haveRegistered=false,tabPlacement=TOP] ACTUAL - ~/Downloads/tmp/openjdk15/jdk-15/bin/javac *.java && ~/Downloads/tmp/openjdk15/jdk-15/bin/java -cp . Bee Exception in thread "main" java.lang.NullPointerException at java.desktop/javax.swing.JTabbedPane.getTabCount(JTabbedPane.java:1118) at java.desktop/javax.swing.plaf.basic.BasicTabbedPaneUI.installTabContainer(BasicTabbedPaneUI.java:308) at java.desktop/javax.swing.plaf.basic.BasicTabbedPaneUI.installComponents(BasicTabbedPaneUI.java:304) at java.desktop/javax.swing.plaf.basic.BasicTabbedPaneUI.installUI(BasicTabbedPaneUI.java:248) at java.desktop/javax.swing.JComponent.setUI(JComponent.java:685) at java.desktop/javax.swing.JTabbedPane.setUI(JTabbedPane.java:253) at java.desktop/javax.swing.JTabbedPane.updateUI(JTabbedPane.java:269) at java.desktop/javax.swing.SwingUtilities.updateComponentTreeUI0(SwingUtilities.java:1363) at java.desktop/javax.swing.SwingUtilities.updateComponentTreeUI(SwingUtilities.java:1354) at java.desktop/javax.swing.JComponent$ReadObjectCallback.validateObject(JComponent.java:5457) at java.base/java.io.ObjectInputStream$ValidationList$1.run(ObjectInputStream.java:2758) at java.base/java.io.ObjectInputStream$ValidationList$1.run(ObjectInputStream.java:2756) at java.base/java.security.AccessController.doPrivileged(AccessController.java:691) at java.base/java.io.ObjectInputStream$ValidationList.doCallbacks(ObjectInputStream.java:2754) at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:506) at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:457) at Bee.main(Bee.java:31) ---------- BEGIN SOURCE ---------- import javax.swing.*; import java.io.*; public class Bee { public static void main(final String[] args) { // --------- create tabbed pane JTabbedPane tabbedPane = new JTabbedPane(); // ------------ Test serializing ------------------- final String file = "swing.ser"; FileOutputStream fout = null; ObjectOutputStream out = null; FileInputStream fin = null; ObjectInputStream oin = null; try { // ______________________ Write tabbedPane... _______________________ fout = new FileOutputStream(file); out = new ObjectOutputStream(fout); out.writeObject(tabbedPane); out.close(); // ____________________________reading pane___________________ fin = new FileInputStream(file); oin = new ObjectInputStream(fin); final JTabbedPane readPane = (JTabbedPane) oin.readObject(); // Das gespeiherte wieder Lese! System.out.println("readPane: " + readPane.toString()); oin.close(); fin.close(); } catch (IOException e1) { e1.printStackTrace(); } catch (ClassNotFoundException e2) { e2.printStackTrace(); } } } ---------- END SOURCE ---------- CUSTOMER SUBMITTED WORKAROUND : My current workaround is to use JDK 8 instead of a newer one. FREQUENCY : always
|