<Swing Dev> JDK-8023043 : Clipboard.getAvailableDataFlavors: Comparison method violates contract

Anton Nashatyrev anton.nashatyrev at oracle.com
Wed Apr 22 14:06:10 UTC 2015


Hi Jason,

     I've commented in the bug report:

Couldn't reproduce locally.
Please next time the problem is reproduced on your side, run the small 
program below and attach its output to this bug (or file a new one). 
Make sure NOT using the system clipboard from the moment of exception 
till running the test program.

import java.awt.*;
import java.awt.datatransfer.DataFlavor;

public class ClipboardDump {
     public static void main(String[] args) {
         System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");

         DataFlavor[] dataFlavors = 
Toolkit.getDefaultToolkit().getSystemClipboard().
                 getAvailableDataFlavors();

         for (DataFlavor df: dataFlavors) {
             System.out.println(df);
         }
     }
}

Please also make sure you are running 7u80 (not an earlier version) 
since the Comparator fix was integrated to 7u80

Thanks!
Anton.
On 21.04.2015 17:29, Jason Mehrens wrote:
> Hello Swing-Dev,
>
>
>
> Recently we have updated to JDK7u80 and have noticed a pattern of users generating the following error:
>
>
>
> ==================
>
> java.lang.IllegalArgumentException: Comparison method violates its general contract!
>
>                  at java.util.TimSort.mergeHi(Unknown Source)
>
>                  at java.util.TimSort.mergeAt(Unknown Source)
>
>                  at java.util.TimSort.mergeCollapse(Unknown Source)
>
>                  at java.util.TimSort.sort(Unknown Source)
>
>                  at java.util.TimSort.sort(Unknown Source)
>
>                  at java.util.Arrays.sort(Unknown Source)
>
>                  at sun.awt.datatransfer.DataTransferer.setToSortedDataFlavorArray(Unknown Source)
>
>                  at sun.awt.datatransfer.ClipboardTransferable.<init>(Unknown Source)
>
>                  at sun.awt.datatransfer.SunClipboard.getContents(Unknown Source)
>
>                  at javax.swing.TransferHandler$TransferAction.actionPerformedImpl(Unknown Source)
>
>                  at javax.swing.TransferHandler$TransferAction.access$700(Unknown Source)
>
>                  at javax.swing.TransferHandler$TransferAction$1.run(Unknown Source)
>
>                  at javax.swing.TransferHandler$TransferAction$1.run(Unknown Source)
>
>                  at java.security.AccessController.doPrivileged(Native Method)
>
>                  at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
>
>                  at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
>
>                  at javax.swing.TransferHandler$TransferAction$2.run(Unknown Source)
>
>                  at javax.swing.TransferHandler$TransferAction$2.run(Unknown Source)
>
>                  at java.security.AccessController.doPrivileged(Native Method)
>
>                  at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
>
>                  at javax.swing.TransferHandler$TransferAction.actionPerformed(Unknown Source)
>
>                  at javax.swing.text.JTextComponent.invokeAction(Unknown Source)
>
>                  at javax.swing.text.JTextComponent.paste(Unknown Source)
>
>                  at javax.swing.text.DefaultEditorKit$PasteAction.actionPerformed(Unknown Source)
>
>                  at javax.swing.SwingUtilities.notifyAction(Unknown Source)
>
>                  at javax.swing.JComponent.processKeyBinding(Unknown Source)
>
>                  at javax.swing.JComponent.processKeyBindings(Unknown Source)
>
>                  at javax.swing.JComponent.processKeyEvent(Unknown Source)
>
>                  at java.awt.Component.processEvent(Unknown Source)
>
>                  at java.awt.Container.processEvent(Unknown Source)
>
>                  at java.awt.Component.dispatchEventImpl(Unknown Source)
>
>                  at java.awt.Container.dispatchEventImpl(Unknown Source)
>
>                  at java.awt.Component.dispatchEvent(Unknown Source)
>
>                  at java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
>
>                  at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
>
>                  at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
>
>                  at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
>
>                  at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
>
>                  at java.awt.Component.dispatchEventImpl(Unknown Source)
>
>                  at java.awt.Container.dispatchEventImpl(Unknown Source)
>
>                  at java.awt.Window.dispatchEventImpl(Unknown Source)
>
>                  at java.awt.Component.dispatchEvent(Unknown Source)
>
>                  at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
>
>                  at java.awt.EventQueue.access$300(Unknown Source)
>
>                  at java.awt.EventQueue$3.run(Unknown Source)
>
>                  at java.awt.EventQueue$3.run(Unknown Source)
>
>                  at java.security.AccessController.doPrivileged(Native Method)
>
>                  at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
>
>                  at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
>
>                  at java.awt.EventQueue$4.run(Unknown Source)
>
>                  at java.awt.EventQueue$4.run(Unknown Source)
>
>                  at java.security.AccessController.doPrivileged(Native Method)
>
>                  at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
>
>                  at java.awt.EventQueue.dispatchEvent(Unknown Source)
>
>                  at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
>
>                  at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
>
>                  at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
>
>                  at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
>
>                  at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
>
>                  at java.awt.EventDispatchThread.run(Unknown Source)
>
> =============
>
>
>
> When I check the issue tracker http://bugs.java.com/view_bug.do?bug_id=8023043 shows as fixed in 7u60.  Did this get fixed in 7u60 through 7u80?   The stacktrace is a little different from that bug so should I file this as a new issue?
>
>
>
> Thanks,
>
>
>
> Jason 		 	   		
>




More information about the swing-dev mailing list