src/share/classes/sun/awt/SunDisplayChanger.java

Print this page

        

*** 26,38 **** package sun.awt; import java.awt.IllegalComponentStateException; import java.util.Collections; import java.util.Iterator; import java.util.Map; import java.util.Set; - import java.util.HashMap; import java.util.WeakHashMap; import sun.util.logging.PlatformLogger; /** --- 26,39 ---- package sun.awt; import java.awt.IllegalComponentStateException; import java.util.Collections; import java.util.Iterator; + import java.util.HashMap; + import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.WeakHashMap; import sun.util.logging.PlatformLogger; /**
*** 52,67 **** * * displayChanged() is also called on Windows when they are moved from one * screen to another on a system equipped with multiple displays. */ public class SunDisplayChanger { private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.multiscreen.SunDisplayChanger"); ! // Create a new synchronizedMap with initial capacity of one listener. // It is asserted that the most common case is to have one GraphicsDevice // and one top-level Window. ! private Map listeners = Collections.synchronizedMap(new WeakHashMap(1)); public SunDisplayChanger() {} /* * Add a DisplayChangeListener to this SunDisplayChanger so that it is --- 53,70 ---- * * displayChanged() is also called on Windows when they are moved from one * screen to another on a system equipped with multiple displays. */ public class SunDisplayChanger { + private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.multiscreen.SunDisplayChanger"); ! // Create a new synchronized map with initial capacity of one listener. // It is asserted that the most common case is to have one GraphicsDevice // and one top-level Window. ! private Map<DisplayChangedListener, Void> listeners = ! Collections.synchronizedMap(new WeakHashMap<DisplayChangedListener, Void>(1)); public SunDisplayChanger() {} /* * Add a DisplayChangeListener to this SunDisplayChanger so that it is
*** 111,132 **** // DisplayChangedListener remove itself from its list. // Because all display change handling is done on the event thread, // synchronization provides no protection against modifying the listener // list while in the middle of iterating over it. -bchristi 7/10/2001 ! HashMap listClone; ! Set cloneSet; synchronized(listeners) { ! listClone = new HashMap(listeners); } ! cloneSet = listClone.keySet(); ! Iterator itr = cloneSet.iterator(); while (itr.hasNext()) { ! DisplayChangedListener current = ! (DisplayChangedListener) itr.next(); try { if (log.isLoggable(PlatformLogger.FINEST)) { log.finest("displayChanged for listener: " + current); } current.displayChanged(); --- 114,132 ---- // DisplayChangedListener remove itself from its list. // Because all display change handling is done on the event thread, // synchronization provides no protection against modifying the listener // list while in the middle of iterating over it. -bchristi 7/10/2001 ! Set<DisplayChangedListener> cloneSet; synchronized(listeners) { ! cloneSet = new HashSet<DisplayChangedListener>(listeners.keySet()); } ! Iterator<DisplayChangedListener> itr = cloneSet.iterator(); while (itr.hasNext()) { ! DisplayChangedListener current = itr.next(); try { if (log.isLoggable(PlatformLogger.FINEST)) { log.finest("displayChanged for listener: " + current); } current.displayChanged();
*** 158,178 **** // DisplayChangedListener remove itself from its list. // Because all display change handling is done on the event thread, // synchronization provides no protection against modifying the listener // list while in the middle of iterating over it. -bchristi 7/10/2001 ! HashMap listClone; ! Set cloneSet; synchronized (listeners) { ! listClone = new HashMap(listeners); } ! cloneSet = listClone.keySet(); ! Iterator itr = cloneSet.iterator(); while (itr.hasNext()) { ! DisplayChangedListener current = ! (DisplayChangedListener) itr.next(); try { if (log.isLoggable(PlatformLogger.FINEST)) { log.finest("paletteChanged for listener: " + current); } current.paletteChanged(); --- 158,175 ---- // DisplayChangedListener remove itself from its list. // Because all display change handling is done on the event thread, // synchronization provides no protection against modifying the listener // list while in the middle of iterating over it. -bchristi 7/10/2001 ! Set<DisplayChangedListener> cloneSet; synchronized (listeners) { ! cloneSet = new HashSet<DisplayChangedListener>(listeners.keySet()); } ! Iterator<DisplayChangedListener> itr = cloneSet.iterator(); while (itr.hasNext()) { ! DisplayChangedListener current = itr.next(); try { if (log.isLoggable(PlatformLogger.FINEST)) { log.finest("paletteChanged for listener: " + current); } current.paletteChanged();