--- old/src/share/classes/sun/awt/datatransfer/SunClipboard.java 2014-05-22 19:39:55.000000000 +0400 +++ new/src/share/classes/sun/awt/datatransfer/SunClipboard.java 2014-05-22 19:39:55.000000000 +0400 @@ -40,7 +40,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.util.Objects; +import java.util.Arrays; import java.util.Set; import java.util.HashSet; @@ -74,11 +74,11 @@ private volatile int numberOfFlavorListeners = 0; /** - * A set of DataFlavors that is available on + * A set of formats that is available on * this clipboard. It is used for tracking changes * of DataFlavors available on this clipboard. */ - private volatile Set currentDataFlavors; + private volatile long[] currentDataFormats; public SunClipboard(String name) { @@ -358,16 +358,7 @@ flavorListeners.add(listener); if (numberOfFlavorListeners++ == 0) { - long[] currentFormats = null; - try { - openClipboard(null); - currentFormats = getClipboardFormats(); - } catch (IllegalStateException exc) { - } finally { - closeClipboard(); - } - currentDataFlavors = formatArrayAsDataFlavorSet(currentFormats); - + currentDataFormats = getClipboardFormatsOpenClose(); registerClipboardViewerChecked(); } } @@ -383,7 +374,7 @@ } if (flavorListeners.remove(listener) && --numberOfFlavorListeners == 0) { unregisterClipboardViewerChecked(); - currentDataFlavors = null; + currentDataFormats = null; } } @@ -417,10 +408,10 @@ * this clipboard */ public void checkChange(long[] formats) { - Set prevDataFlavors = currentDataFlavors; - currentDataFlavors = formatArrayAsDataFlavorSet(formats); + long[] prevDataFlavors = currentDataFormats; + currentDataFormats = formats; - if (Objects.equals(prevDataFlavors, currentDataFlavors)) { + if (Arrays.equals(prevDataFlavors, currentDataFormats)) { // we've been able to successfully get available on the clipboard // DataFlavors this and previous time and they are coincident; // don't notify