changeset 7048:0b2b0051e7a1

8039097: Some tests fail with NPE since 7u60 b12 Reviewed-by: serb, alexsch
author pchelko
date Tue, 08 Apr 2014 16:59:01 +0400
parents a7f1881673cd
children 91bfea07f665
files src/share/classes/java/awt/Toolkit.java src/windows/classes/sun/awt/windows/WToolkit.java
diffstat 2 files changed, 30 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/java/awt/Toolkit.java	Wed Mar 26 20:35:47 2014 +0000
+++ b/src/share/classes/java/awt/Toolkit.java	Tue Apr 08 16:59:01 2014 +0400
@@ -2559,26 +2559,30 @@
         public void firePropertyChange(final PropertyChangeEvent evt) {
             Object oldValue = evt.getOldValue();
             Object newValue = evt.getNewValue();
+            String propertyName = evt.getPropertyName();
             if (oldValue != null && newValue != null && oldValue.equals(newValue)) {
                 return;
             }
+            Runnable updater = new Runnable() {
+                public void run() {
+                    PropertyChangeSupport pcs = (PropertyChangeSupport)
+                        AppContext.getAppContext().get(PROP_CHANGE_SUPPORT_KEY);
+                    if (null != pcs) {
+                        pcs.firePropertyChange(evt);
+                    }
+                }
+            };
+            final AppContext currentAppContext = AppContext.getAppContext();
             for (AppContext appContext : AppContext.getAppContexts()) {
                 if (null == appContext || appContext.isDisposed()) {
                     continue;
                 }
-                final PeerEvent e = new PeerEvent(source,
-                        new Runnable() {
-                            @Override
-                            public void run() {
-                                PropertyChangeSupport pcs = (PropertyChangeSupport)
-                                        AppContext.getAppContext().get(PROP_CHANGE_SUPPORT_KEY);
-                                if (null != pcs) {
-                                    pcs.firePropertyChange(evt);
-                                }
-                            }
-                        },
-                        PeerEvent.ULTIMATE_PRIORITY_EVENT);
-                SunToolkit.postEvent(appContext, e);
+                if (currentAppContext == appContext) {
+                    updater.run();
+                } else {
+                    final PeerEvent e = new PeerEvent(source, updater, PeerEvent.ULTIMATE_PRIORITY_EVENT);
+                    SunToolkit.postEvent(appContext, e);
+                }
             }
         }
     }
--- a/src/windows/classes/sun/awt/windows/WToolkit.java	Wed Mar 26 20:35:47 2014 +0000
+++ b/src/windows/classes/sun/awt/windows/WToolkit.java	Tue Apr 08 16:59:01 2014 +0400
@@ -37,6 +37,7 @@
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import sun.awt.AWTAutoShutdown;
+import sun.awt.AppContext;
 import sun.awt.SunToolkit;
 import sun.awt.Win32GraphicsDevice;
 import sun.awt.Win32GraphicsEnvironment;
@@ -855,7 +856,18 @@
      * Windows doesn't always send WM_SETTINGCHANGE when it should.
      */
     private void windowsSettingChange() {
-        updateProperties();
+        if (AppContext.getAppContext() == null) {
+            // No AppContext, so we can update properties on the current thread,
+            // DesktopPropertyChangeSupport will only post events.
+            updateProperties();
+        } else {
+            EventQueue.invokeLater(new Runnable() {
+                @Override
+                public void run() {
+                    updateProperties();
+                }
+            });
+        }
     }
 
     private synchronized void updateProperties() {