--- old/src/share/classes/java/awt/datatransfer/Clipboard.java 2014-04-09 17:32:49.000000000 +0400 +++ new/src/share/classes/java/awt/datatransfer/Clipboard.java 2014-04-09 17:32:48.000000000 +0400 @@ -67,7 +67,7 @@ * * @since 1.5 */ - private final Set flavorListeners = new HashSet<>(); + private Set flavorListeners; /** * A set of DataFlavors that is available on @@ -85,7 +85,6 @@ */ public Clipboard(String name) { this.name = name; - currentDataFlavors = getAvailableDataFlavorSet(); } /** @@ -257,6 +256,12 @@ if (listener == null) { return; } + + if (flavorListeners == null) { + flavorListeners = new HashSet<>(); + currentDataFlavors = getAvailableDataFlavorSet(); + } + flavorListeners.add(listener); } @@ -278,7 +283,7 @@ * @since 1.5 */ public synchronized void removeFlavorListener(FlavorListener listener) { - if (listener == null) { + if (listener == null || flavorListeners == null) { return; } flavorListeners.remove(listener); @@ -297,7 +302,8 @@ * @since 1.5 */ public synchronized FlavorListener[] getFlavorListeners() { - return flavorListeners.toArray(new FlavorListener[flavorListeners.size()]); + return flavorListeners == null ? new FlavorListener[0] : + flavorListeners.toArray(new FlavorListener[flavorListeners.size()]); } /** @@ -308,6 +314,10 @@ * @since 1.5 */ private void fireFlavorsChanged() { + if (flavorListeners == null) { + return; + } + Set prevDataFlavors = currentDataFlavors; currentDataFlavors = getAvailableDataFlavorSet(); if (Objects.equals(prevDataFlavors, currentDataFlavors)) {