Opened 17 years ago
Closed 17 years ago
#1403 closed defect (fixed)
Error when opening preferences after start.
Reported by: | Tiny | Owned by: | stoecker |
---|---|---|---|
Priority: | major | Milestone: | |
Component: | Core | Version: | |
Keywords: | Cc: |
Description
Hi, I got the following error when I tried to open the preferences dialog (via the shortcut button). This happened immediately after I started the josm-latest.jar (downloaded 2008.08.11 16:50 UTC). Error message follows.
Path: trunk
URL: http://josm.openstreetmap.de/svn/trunk
Repository Root: http://josm.openstreetmap.de/svn
Repository UUID: 0c6e7542-c601-0410-84e7-c038aed88b3b
Revision: 761
Node Kind: directory
Last Changed Author: gebner
Last Changed Rev: 761
Last Changed Date: 2008-08-08 18:25:59 +0200 (Fri, 08 Aug 2008)
java.lang.NullPointerException
at javax.swing.JComponent.setBorder(JComponent.java:1777)
at javax.swing.DefaultListCellRenderer.getListCellRendererComponent(DefaultListCellRenderer.java:159)
at org.openstreetmap.josm.gui.preferences.ToolbarPreferences$1.getListCellRendererComponent(ToolbarPreferences.java:114)
at javax.swing.plaf.basic.BasicListUI.updateLayoutState(BasicListUI.java:1355)
at javax.swing.plaf.basic.BasicListUI.maybeUpdateLayoutState(BasicListUI.java:1305)
at javax.swing.plaf.basic.BasicListUI.getPreferredSize(BasicListUI.java:572)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1643)
at javax.swing.JList.getPreferredScrollableViewportSize(JList.java:2399)
at javax.swing.ViewportLayout.preferredLayoutSize(ViewportLayout.java:92)
at java.awt.Container.preferredSize(Container.java:1665)
at java.awt.Container.getPreferredSize(Container.java:1650)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1645)
at javax.swing.ScrollPaneLayout.preferredLayoutSize(ScrollPaneLayout.java:492)
at java.awt.Container.preferredSize(Container.java:1665)
at java.awt.Container.getPreferredSize(Container.java:1650)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1645)
at java.awt.GridBagLayout.GetLayoutInfo(GridBagLayout.java:1109)
at java.awt.GridBagLayout.getLayoutInfo(GridBagLayout.java:910)
at java.awt.GridBagLayout.preferredLayoutSize(GridBagLayout.java:730)
at java.awt.Container.preferredSize(Container.java:1665)
at java.awt.Container.getPreferredSize(Container.java:1650)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1645)
at org.openstreetmap.josm.gui.preferences.ToolbarPreferences$4.preferredLayoutSize(ToolbarPreferences.java:184)
at java.awt.Container.preferredSize(Container.java:1665)
at java.awt.Container.getPreferredSize(Container.java:1650)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1645)
at java.awt.GridBagLayout.GetLayoutInfo(GridBagLayout.java:1109)
at java.awt.GridBagLayout.getLayoutInfo(GridBagLayout.java:910)
at java.awt.GridBagLayout.preferredLayoutSize(GridBagLayout.java:730)
at java.awt.Container.preferredSize(Container.java:1665)
at java.awt.Container.getPreferredSize(Container.java:1650)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1645)
at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.calculateSize(BasicTabbedPaneUI.java:2296)
at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.preferredLayoutSize(BasicTabbedPaneUI.java:2270)
at java.awt.Container.preferredSize(Container.java:1665)
at java.awt.Container.getPreferredSize(Container.java:1650)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1645)
at java.awt.GridBagLayout.GetLayoutInfo(GridBagLayout.java:1109)
at java.awt.GridBagLayout.getLayoutInfo(GridBagLayout.java:910)
at java.awt.GridBagLayout.preferredLayoutSize(GridBagLayout.java:730)
at java.awt.Container.preferredSize(Container.java:1665)
at java.awt.Container.getPreferredSize(Container.java:1650)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1645)
at java.awt.GridBagLayout.GetLayoutInfo(GridBagLayout.java:1109)
at java.awt.GridBagLayout.getLayoutInfo(GridBagLayout.java:910)
at java.awt.GridBagLayout.preferredLayoutSize(GridBagLayout.java:730)
at java.awt.Container.preferredSize(Container.java:1665)
at java.awt.Container.getPreferredSize(Container.java:1650)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1645)
at java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:719)
at java.awt.Container.preferredSize(Container.java:1665)
at java.awt.Container.getPreferredSize(Container.java:1650)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1645)
at java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:719)
at java.awt.Container.preferredSize(Container.java:1665)
at java.awt.Container.getPreferredSize(Container.java:1650)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1645)
at javax.swing.BoxLayout.checkRequests(BoxLayout.java:481)
at javax.swing.BoxLayout.preferredLayoutSize(BoxLayout.java:298)
at javax.swing.plaf.basic.BasicOptionPaneUI.getPreferredSize(BasicOptionPaneUI.java:270)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1643)
at java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:719)
at java.awt.Container.preferredSize(Container.java:1665)
at java.awt.Container.getPreferredSize(Container.java:1650)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1645)
at javax.swing.JRootPane$RootLayout.preferredLayoutSize(JRootPane.java:911)
at java.awt.Container.preferredSize(Container.java:1665)
at java.awt.Container.getPreferredSize(Container.java:1650)
at javax.swing.JComponent.getPreferredSize(JComponent.java:1645)
at java.awt.BorderLayout.preferredLayoutSize(BorderLayout.java:719)
at java.awt.Container.preferredSize(Container.java:1665)
at java.awt.Container.getPreferredSize(Container.java:1650)
at java.awt.Window.pack(Window.java:700)
at javax.swing.JOptionPane.initDialog(JOptionPane.java:988)
at javax.swing.JOptionPane.createDialog(JOptionPane.java:969)
at javax.swing.JOptionPane.createDialog(JOptionPane.java:920)
at org.openstreetmap.josm.actions.PreferencesAction.actionPerformed(PreferencesAction.java:41)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
at java.awt.Component.processMouseEvent(Component.java:6106)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3276)
at java.awt.Component.processEvent(Component.java:5871)
at java.awt.Container.processEvent(Container.java:2105)
at java.awt.Component.dispatchEventImpl(Component.java:4467)
at java.awt.Container.dispatchEventImpl(Container.java:2163)
at java.awt.Component.dispatchEvent(Component.java:4293)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
at java.awt.Container.dispatchEventImpl(Container.java:2149)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4293)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
Attachments (2)
Change History (9)
comment:1 by , 17 years ago
comment:2 by , 17 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:3 by , 17 years ago
See http://bugs.sun.com/view_bug.do?bug_id=6624717 .
Seems like a JDK bug:
It happes like that:
- DefaultListCellRenderer.getListCellRendererComponent calls setBorder(UIManager.get(someBorder))
- JComponent.setBorder(line 1777) makes an unsafe check which throws a NPE if the border's getBorderInsets returns null
comment:4 by , 17 years ago
Owner: | changed from | to
---|---|
Status: | assigned → new |
I posted a patch which wraps the problematic border so that default Insets will be given back instead of null.
The second patch has slightly better indentation than the first.
comment:5 by , 17 years ago
NOTE: Other reports with same issue:
http://josm.openstreetmap.de/search?q=ToolbarPreferences&wiki=on&changeset=on&ticket=on
comment:6 by , 17 years ago
The problem is this:
- The ToolbarPreferences are initialized in the static initializer of Main.
- The LookAndFeel is initialized in Main.preConstructorInit
- Internal data structures of GUI elements used in ToolbarPreferences are not initialized properly to use the later set LAF
Solution:
- Initialize ToolbarPreferences after the LAF
-
src/org/openstreetmap/josm/Main.java
src/org/openstreetmap/josm/Main.java | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/src/org/openstreetmap/josm/Main.java b/src/org/openstreetmap/josm/Main.java index 345d062..fcd3cae 100644
a b abstract public class Main { 111 111 /** 112 112 * The toolbar preference control to register new actions. 113 113 */ 114 public static ToolbarPreferences toolbar = new ToolbarPreferences();114 public static ToolbarPreferences toolbar; 115 115 116 116 117 117 public UndoRedoHandler undoRedo = new UndoRedoHandler(); … … abstract public class Main { 344 344 345 345 try { 346 346 UIManager.setLookAndFeel(Main.pref.get("laf")); 347 toolbar = new ToolbarPreferences(); 347 348 contentPane.updateUI(); 348 349 panel.updateUI(); 349 350 } catch (final Exception e) {
Duplicate. See #1364.