jadx: java.lang.IllegalArgumentException: Comparison method violates its general contract!
Please describe what you did before the error occurred. IMPORTANT! If the error occurs with a specific APK file please attach or provide link to apk file!
- Jadx version: 1.4.3
- Java version: 11.0.12
- Java VM: JetBrains s.r.o OpenJDK 64-Bit Server VM
- Platform: Windows 10 (10.0 amd64)
- Max heap size: 30688 MB
- Program args: -Xms128M -XX:MaxRAMPercentage=70.0 -XX:+UseG1GC -Dawt.useSystemAAFontSettings=lcd -Dswing.aatext=true
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.base/java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:870)
at java.base/java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:487)
at java.base/java.util.ComparableTimSort.mergeCollapse(ComparableTimSort.java:413)
at java.base/java.util.ComparableTimSort.sort(ComparableTimSort.java:213)
at java.base/java.util.Arrays.sort(Arrays.java:1249)
at java.desktop/sun.awt.shell.Win32ShellFolderManager2.get(Win32ShellFolderManager2.java:313)
at java.desktop/sun.awt.shell.ShellFolder.get(ShellFolder.java:259)
at java.desktop/javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel.addItem(MetalFileChooserUI.java:1029)
at java.desktop/javax.swing.plaf.metal.MetalFileChooserUI.doDirectoryChanged(MetalFileChooserUI.java:717)
at java.desktop/javax.swing.plaf.metal.MetalFileChooserUI$5.propertyChange(MetalFileChooserUI.java:806)
at java.desktop/java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:341)
at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:333)
at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:266)
at java.desktop/java.awt.Component.firePropertyChange(Component.java:8754)
at java.desktop/javax.swing.JFileChooser.setCurrentDirectory(JFileChooser.java:608)
at java.desktop/javax.swing.JFileChooser.<init>(JFileChooser.java:362)
at java.desktop/javax.swing.JFileChooser.<init>(JFileChooser.java:338)
at jadx.gui.ui.dialog.FileDialog$FileChooser.<init>(FileDialog.java:156)
at jadx.gui.ui.dialog.FileDialog.buildFileChooser(FileDialog.java:138)
at jadx.gui.ui.dialog.FileDialog.show(FileDialog.java:74)
at jadx.gui.ui.MainWindow.openFileOrProject(MainWindow.java:295)
at jadx.gui.ui.MainWindow.processCommandLineArgs(MainWindow.java:252)
at jadx.gui.ui.MainWindow.init(MainWindow.java:247)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
About this issue
- Original URL
- State: open
- Created 2 years ago
- Comments: 23 (10 by maintainers)
Commits related to this issue
- fix(gui): fix broken FileDialog by using legacy sort (#1628)(PR #1630) #1628 #1606 #1213 #1574 #1552 — committed to skylot/jadx by xxr0ss 2 years ago
- fix(gui): set legacy sort flag also for launch4j (#1628) — committed to skylot/jadx by skylot 2 years ago
I came across this issue while troubleshooting the same problem for a user on a different project. Here is quite a long thread detailing that effort. If you scroll all the way to the bottom, you’ll find two posts where I explain the cause.
The short version is: This line in
sun.awt.shell.Win32ShellFolderManager2.compareShellFolders()is wrong. The condition should be a conjunction instead of a disjunction.I submitted a bug report to OpenJDK earlier today. I’d encourage you to do the same; maybe we can light a fire under them to get this fixed.
@jpstotz @skylot I’ve debugged FileDialog and it turned out to be a bug in
javax.swing.JFileChooser.Here’s the quick fix: Add
-Djava.util.Arrays.useLegacyMergeSort=trueto JVM_OPTS