java.lang.IllegalArgumentException: Comparison method violates its general contract!

JDK Bug System | Webbug Group | 2 years ago
  1. 0

    FULL PRODUCT VERSION : java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode) ADDITIONAL OS VERSION INFORMATION : Microsoft Windows [Version 6.1.7601] A DESCRIPTION OF THE PROBLEM : When pasting an item into a Java application, SunClipboard eventually calls the method "DataTransferer.setToSortedDataFlavorArray()". This ultimately calls Array.sort on a DataFlavor set using a DataFlavor.DataFlavorComparator. DataFlavor.DataFlavorComparator is passed to java.util.TimSort, which, depending on the data being sorted, sometimes throws the exception "java.lang.IllegalArgumentException: Comparison method violates its general contract!". TimSort does a check when sorting to verify if the comparator given to it is valid. With some DataFlavor sets, this check will fail. It appears DataFlavor.DataFlavorComparator does not correctly honor the requirements that Comparator mandates for the .compare method. STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : Copy and paste data into a Java application. The bug is dependent on the order of the DataFlavor(s) (which is in a HashSet) and the type of DataFlavor(s), and there must be at least 32 DataFlavor(s) in order for TimSort to be used, so it's extremely difficult to reproduce in a normal application. ERROR MESSAGES/STACK TRACES THAT OCCUR : 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.mergeForceCollapse(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$800(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 jSSS.jgui.KeyEventManager.dispatchKeyEvent(KeyEventManager.java:132) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) at jSSS.jgui.KeyEventManager.dispatchEvent(KeyEventManager.java:455) 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$500(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 jSSS.jgui.sssworker.SSSMouseBlocker.dispatchEvent(SSSMouseBlocker.java:105) 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) REPRODUCIBILITY : This bug can be reproduced rarely. ---------- BEGIN SOURCE ---------- import sun.awt.datatransfer.DataTransferer; import java.awt.datatransfer.DataFlavor; import java.util.LinkedHashSet; import java.util.Set; public class Test { public static void main(String args[]) throws ClassNotFoundException { // If the set is smaller than TimSort.MIN_MERGE (32), TimSort will use a binary sort instead which won't // enter the code branch that we want. String[] mimes = new String[]{ "text/plain; class=java.lang.Object; charset=unicode", "text/plain; class=java.io.InputStream; charset=unicode", "text/html; document=fragment; class=java.nio.ByteBuffer; charset=windows-1252", "text/html; document=all; class=java.nio.ByteBuffer; charset=ISO-8859-1", "text/html; document=all; class=\"[B\"; charset=UTF-16", "application/x-java-serialized-object; class=java.lang.String", "application/unknown; class=java.lang.Object", "text/html; document=selection; class=java.io.InputStream; charset=UTF-16BE", "text/html; document=selection; class=\"[B\"; charset=UTF-16BE", "text/plain; class=java.io.InputStream; charset=UTF-8", "text/html; document=fragment; class=java.io.InputStream; charset=US-ASCII", "text/plain; class=java.nio.ByteBuffer; charset=UTF-16LE", "text/plain; class=\"[B\"; charset=ISO-8859-1", "text/html; document=all; class=java.io.InputStream; charset=UTF-16BE", "text/html; document=all; class=java.nio.ByteBuffer; charset=UTF-16BE", "text/unknown; class=java.lang.String", "text/plain; class=java.lang.Object", "text/html; document=all; class=java.nio.ByteBuffer; charset=US-ASCII", "text/html; document=fragment; class=java.io.InputStream; charset=windows-1252", "text/html; class=java.lang.Object; charset=unicode", "text/html; document=all; class=java.nio.ByteBuffer; charset=UTF-8", "unknown/flavor; class=java.lang.Object", "text/html; document=fragment; class=java.io.InputStream; charset=UTF-8", "text/html; document=fragment; class=java.io.InputStream; charset=ISO-8859-1", "text/plain; class=java.io.Reader", "text/html; document=selection; class=java.io.InputStream; charset=UTF-16LE", "text/html; document=selection; class=java.nio.ByteBuffer; charset=windows-1252", "text/html; document=all; class=\"[B\"; charset=US-ASCII", "text/html; document=all; class=\"[B\"; charset=UTF-16LE", "text/html; document=fragment; class=java.lang.String; charset=Unicode", "text/plain; class=\"[C\"; charset=Unicode", "text/html; document=fragment; class=java.io.InputStream; charset=UTF-16LE" }; // We have to use a LinkedHashSet as this bug is dependent on the order of the entries in the set. // Normally SunClipboard uses a HashSet which makes it difficult to replicate the test reliably. final Set<DataFlavor> flavorSet = new LinkedHashSet<>(32); for (String mime : mimes) { flavorSet.add(new DataFlavor(mime)); } // This will throw an IllegalArgumentException. DataTransferer.setToSortedDataFlavorArray(flavorSet); } } ---------- END SOURCE ---------- CUSTOMER SUBMITTED WORKAROUND : -Djava.util.Arrays.useLegacyMergeSort=true as a JVM parameter will use the legacy sort and avoids the TimSort which performs this validation.

    JDK Bug System | 2 years ago | Webbug Group
    java.lang.IllegalArgumentException: Comparison method violates its general contract!
  2. 0

    FULL PRODUCT VERSION : java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode) ADDITIONAL OS VERSION INFORMATION : Microsoft Windows [Version 6.1.7601] A DESCRIPTION OF THE PROBLEM : When pasting an item into a Java application, SunClipboard eventually calls the method "DataTransferer.setToSortedDataFlavorArray()". This ultimately calls Array.sort on a DataFlavor set using a DataFlavor.DataFlavorComparator. DataFlavor.DataFlavorComparator is passed to java.util.TimSort, which, depending on the data being sorted, sometimes throws the exception "java.lang.IllegalArgumentException: Comparison method violates its general contract!". TimSort does a check when sorting to verify if the comparator given to it is valid. With some DataFlavor sets, this check will fail. It appears DataFlavor.DataFlavorComparator does not correctly honor the requirements that Comparator mandates for the .compare method. STEPS TO FOLLOW TO REPRODUCE THE PROBLEM : Copy and paste data into a Java application. The bug is dependent on the order of the DataFlavor(s) (which is in a HashSet) and the type of DataFlavor(s), and there must be at least 32 DataFlavor(s) in order for TimSort to be used, so it's extremely difficult to reproduce in a normal application. ERROR MESSAGES/STACK TRACES THAT OCCUR : 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.mergeForceCollapse(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$800(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 jSSS.jgui.KeyEventManager.dispatchKeyEvent(KeyEventManager.java:132) at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source) at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source) at java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source) at jSSS.jgui.KeyEventManager.dispatchEvent(KeyEventManager.java:455) 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$500(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 jSSS.jgui.sssworker.SSSMouseBlocker.dispatchEvent(SSSMouseBlocker.java:105) 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) REPRODUCIBILITY : This bug can be reproduced rarely. ---------- BEGIN SOURCE ---------- import sun.awt.datatransfer.DataTransferer; import java.awt.datatransfer.DataFlavor; import java.util.LinkedHashSet; import java.util.Set; public class Test { public static void main(String args[]) throws ClassNotFoundException { // If the set is smaller than TimSort.MIN_MERGE (32), TimSort will use a binary sort instead which won't // enter the code branch that we want. String[] mimes = new String[]{ "text/plain; class=java.lang.Object; charset=unicode", "text/plain; class=java.io.InputStream; charset=unicode", "text/html; document=fragment; class=java.nio.ByteBuffer; charset=windows-1252", "text/html; document=all; class=java.nio.ByteBuffer; charset=ISO-8859-1", "text/html; document=all; class=\"[B\"; charset=UTF-16", "application/x-java-serialized-object; class=java.lang.String", "application/unknown; class=java.lang.Object", "text/html; document=selection; class=java.io.InputStream; charset=UTF-16BE", "text/html; document=selection; class=\"[B\"; charset=UTF-16BE", "text/plain; class=java.io.InputStream; charset=UTF-8", "text/html; document=fragment; class=java.io.InputStream; charset=US-ASCII", "text/plain; class=java.nio.ByteBuffer; charset=UTF-16LE", "text/plain; class=\"[B\"; charset=ISO-8859-1", "text/html; document=all; class=java.io.InputStream; charset=UTF-16BE", "text/html; document=all; class=java.nio.ByteBuffer; charset=UTF-16BE", "text/unknown; class=java.lang.String", "text/plain; class=java.lang.Object", "text/html; document=all; class=java.nio.ByteBuffer; charset=US-ASCII", "text/html; document=fragment; class=java.io.InputStream; charset=windows-1252", "text/html; class=java.lang.Object; charset=unicode", "text/html; document=all; class=java.nio.ByteBuffer; charset=UTF-8", "unknown/flavor; class=java.lang.Object", "text/html; document=fragment; class=java.io.InputStream; charset=UTF-8", "text/html; document=fragment; class=java.io.InputStream; charset=ISO-8859-1", "text/plain; class=java.io.Reader", "text/html; document=selection; class=java.io.InputStream; charset=UTF-16LE", "text/html; document=selection; class=java.nio.ByteBuffer; charset=windows-1252", "text/html; document=all; class=\"[B\"; charset=US-ASCII", "text/html; document=all; class=\"[B\"; charset=UTF-16LE", "text/html; document=fragment; class=java.lang.String; charset=Unicode", "text/plain; class=\"[C\"; charset=Unicode", "text/html; document=fragment; class=java.io.InputStream; charset=UTF-16LE" }; // We have to use a LinkedHashSet as this bug is dependent on the order of the entries in the set. // Normally SunClipboard uses a HashSet which makes it difficult to replicate the test reliably. final Set<DataFlavor> flavorSet = new LinkedHashSet<>(32); for (String mime : mimes) { flavorSet.add(new DataFlavor(mime)); } // This will throw an IllegalArgumentException. DataTransferer.setToSortedDataFlavorArray(flavorSet); } } ---------- END SOURCE ---------- CUSTOMER SUBMITTED WORKAROUND : -Djava.util.Arrays.useLegacyMergeSort=true as a JVM parameter will use the legacy sort and avoids the TimSort which performs this validation.

    JDK Bug System | 2 years ago | Webbug Group
    java.lang.IllegalArgumentException: Comparison method violates its general contract!
  3. 0

    IllegalArgumentException in ViewerComparator.sort (189)

    Eclipse Bugzilla | 2 years ago | error-reports-inbox
    java.lang.IllegalArgumentException: Comparison method violates its general contract!
  4. Speed up your debug routine!

    Automated exception search integrated into your IDE

  5. 0

    Clipboard failure

    GitHub | 1 year ago | gary-rowe
    java.lang.IllegalArgumentException: Comparison method violates its general contract!
  6. 0

    JGraph/JGraphX : Creating a very complex graph

    Stack Overflow | 3 years ago | user2730789
    java.lang.IllegalArgumentException: Comparison method violates its general contract!

    Not finding the right solution?
    Take a tour to get the most out of Samebug.

    Tired of useless tips?

    Automated exception search integrated into your IDE

    Root Cause Analysis

    1. java.lang.IllegalArgumentException

      Comparison method violates its general contract!

      at java.util.TimSort.mergeHi()
    2. Java RT
      DefaultKeyboardFocusManager.dispatchKeyEvent
      1. java.util.TimSort.mergeHi(Unknown Source)
      2. java.util.TimSort.mergeAt(Unknown Source)
      3. java.util.TimSort.mergeForceCollapse(Unknown Source)
      4. java.util.TimSort.sort(Unknown Source)
      5. java.util.Arrays.sort(Unknown Source)
      6. sun.awt.datatransfer.DataTransferer.setToSortedDataFlavorArray(Unknown Source)
      7. sun.awt.datatransfer.ClipboardTransferable.<init>(Unknown Source)
      8. sun.awt.datatransfer.SunClipboard.getContents(Unknown Source)
      9. javax.swing.TransferHandler$TransferAction.actionPerformedImpl(Unknown Source)
      10. javax.swing.TransferHandler$TransferAction.access$800(Unknown Source)
      11. javax.swing.TransferHandler$TransferAction$1.run(Unknown Source)
      12. javax.swing.TransferHandler$TransferAction$1.run(Unknown Source)
      13. java.security.AccessController.doPrivileged(Native Method)
      14. java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
      15. java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
      16. javax.swing.TransferHandler$TransferAction$2.run(Unknown Source)
      17. javax.swing.TransferHandler$TransferAction$2.run(Unknown Source)
      18. java.security.AccessController.doPrivileged(Native Method)
      19. java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
      20. javax.swing.TransferHandler$TransferAction.actionPerformed(Unknown Source)
      21. javax.swing.text.JTextComponent.invokeAction(Unknown Source)
      22. javax.swing.text.JTextComponent.paste(Unknown Source)
      23. javax.swing.text.DefaultEditorKit$PasteAction.actionPerformed(Unknown Source)
      24. javax.swing.SwingUtilities.notifyAction(Unknown Source)
      25. javax.swing.JComponent.processKeyBinding(Unknown Source)
      26. javax.swing.JComponent.processKeyBindings(Unknown Source)
      27. javax.swing.JComponent.processKeyEvent(Unknown Source)
      28. java.awt.Component.processEvent(Unknown Source)
      29. java.awt.Container.processEvent(Unknown Source)
      30. java.awt.Component.dispatchEventImpl(Unknown Source)
      31. java.awt.Container.dispatchEventImpl(Unknown Source)
      32. java.awt.Component.dispatchEvent(Unknown Source)
      33. java.awt.KeyboardFocusManager.redispatchEvent(Unknown Source)
      34. java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(Unknown Source)
      34 frames
    3. jSSS.jgui
      KeyEventManager.dispatchKeyEvent
      1. jSSS.jgui.KeyEventManager.dispatchKeyEvent(KeyEventManager.java:132)
      1 frame
    4. Java RT
      DefaultKeyboardFocusManager.dispatchEvent
      1. java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(Unknown Source)
      2. java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
      3. java.awt.DefaultKeyboardFocusManager.dispatchEvent(Unknown Source)
      3 frames
    5. jSSS.jgui
      KeyEventManager.dispatchEvent
      1. jSSS.jgui.KeyEventManager.dispatchEvent(KeyEventManager.java:455)
      1 frame
    6. Java RT
      EventQueue.dispatchEvent
      1. java.awt.Component.dispatchEventImpl(Unknown Source)
      2. java.awt.Container.dispatchEventImpl(Unknown Source)
      3. java.awt.Window.dispatchEventImpl(Unknown Source)
      4. java.awt.Component.dispatchEvent(Unknown Source)
      5. java.awt.EventQueue.dispatchEventImpl(Unknown Source)
      6. java.awt.EventQueue.access$500(Unknown Source)
      7. java.awt.EventQueue$3.run(Unknown Source)
      8. java.awt.EventQueue$3.run(Unknown Source)
      9. java.security.AccessController.doPrivileged(Native Method)
      10. java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
      11. java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
      12. java.awt.EventQueue$4.run(Unknown Source)
      13. java.awt.EventQueue$4.run(Unknown Source)
      14. java.security.AccessController.doPrivileged(Native Method)
      15. java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
      16. java.awt.EventQueue.dispatchEvent(Unknown Source)
      16 frames
    7. jSSS.jgui.sssworker
      SSSMouseBlocker.dispatchEvent
      1. jSSS.jgui.sssworker.SSSMouseBlocker.dispatchEvent(SSSMouseBlocker.java:105)
      1 frame
    8. Java RT
      EventDispatchThread.run
      1. java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
      2. java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
      3. java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
      4. java.awt.EventDispatchThread.pumpEvents(Unknown Source)
      5. java.awt.EventDispatchThread.pumpEvents(Unknown Source)
      6. java.awt.EventDispatchThread.run(Unknown Source)
      6 frames