JDK-6494398 : GTK L&F: NPE thrown when using SCROLL_TAB_LAYOUT
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 6u2,7
  • Priority: P3
  • Status: Closed
  • Resolution: Fixed
  • OS: generic,solaris
  • CPU: generic,sparc
  • Submitted: 2006-11-16
  • Updated: 2011-03-09
  • Resolved: 2011-03-08
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 6 JDK 7
6u2Fixed 7 b07Fixed
Related Reports
Duplicate :  
Relates :  
Description
Run the attached TabbedPaneDemo.java testcase on the latest Swing nightly build:
% java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel TabbedPaneDemo

The testcase will fail to display and throws exceptions like the following:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
       at com.sun.java.swing.plaf.gtk.GTKStyle.get(GTKStyle.java:713)
       at javax.swing.plaf.synth.SynthStyle.getInt(SynthStyle.java:952)
       at javax.swing.plaf.synth.SynthArrowButton$SynthArrowButtonUI.getPreferredSize(SynthArrowButton.java:95)
       at javax.swing.JComponent.getPreferredSize(JComponent.java:1628)
       at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneScrollLayout.layoutContainer(BasicTabbedPaneUI.java:3042)
       at java.awt.Container.layout(Container.java:1432)
       at java.awt.Container.doLayout(Container.java:1421)
       at java.awt.Container.validateTree(Container.java:1519)
       at java.awt.Container.validateTree(Container.java:1526)
       at java.awt.Container.validateTree(Container.java:1526)
       at java.awt.Container.validateTree(Container.java:1526)
       at java.awt.Container.validateTree(Container.java:1526)
       at java.awt.Container.validateTree(Container.java:1526)
       at java.awt.Container.validate(Container.java:1491)
       at java.awt.Window.pack(Window.java:674)
       at TabbedPaneDemo.createAndShowGUI(TabbedPaneDemo.java:104)
       at TabbedPaneDemo.access$000(TabbedPaneDemo.java:21)
       at TabbedPaneDemo$1.run(TabbedPaneDemo.java:113)
       at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
       at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
       at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
       at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
       at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
       at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

This is reproducible with Swing's nightly build from 2006-10-20 and later.

Comments
EVALUATION This is a regression caused by the putback for: 6292725: GTK L&F: JSpinner, JComboBox does not look like native The problem is this line of code from GTKStyle.get(): if (context.getComponent().getName().startsWith("Spinner")) { It is possible for getName() to return null, as is the case for SynthArrowButton when used by TabbedPaneScrollLayout, thus the NPE. This is simple, add a null check: String name = context.getComponent().getName(); if (name != null && name.startsWith("Spinner")) {
16-11-2006