起動時エラー: Comparison method violates its general contract!

問題

MabiIccoの起動時に下記のエラーメッセージがでて、起動完了しないことがあるようです。

Comparison method violates its general contract!

このエラー自体はsort関数ででるもののようですが、MabiIccoの起動時おいては直接使ってはいないので別経路での問題らしい。

発生しない場合の方が多く、発生する環境においては100%発生します。

発生する環境を持っている方にエラー時のログをとってもらいました。

java.lang.IllegalArgumentException: Comparison method violates its general contract!
        at java.base/java.util.ComparableTimSort.mergeHi(Unknown Source)
        at java.base/java.util.ComparableTimSort.mergeAt(Unknown Source)
        at java.base/java.util.ComparableTimSort.mergeForceCollapse(Unknown Source)
        at java.base/java.util.ComparableTimSort.sort(Unknown Source)
        at java.base/java.util.Arrays.sort(Unknown Source)
        at java.desktop/sun.awt.shell.Win32ShellFolderManager2.get(Unknown Source)
        at java.desktop/sun.awt.shell.ShellFolder.get(Unknown Source)
        at java.desktop/javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel.addItem(Unknown Source)
        at java.desktop/javax.swing.plaf.metal.MetalFileChooserUI.doDirectoryChanged(Unknown Source)
        at java.desktop/javax.swing.plaf.metal.MetalFileChooserUI$5.propertyChange(Unknown Source)
        at java.desktop/java.beans.PropertyChangeSupport.fire(Unknown Source)
        at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
        at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
        at java.desktop/java.awt.Component.firePropertyChange(Unknown Source)
        at java.desktop/javax.swing.JFileChooser.setCurrentDirectory(Unknown Source)
        at jp.fourthline.mabiicco.FixFileChooser.setCurrentDirectory(Unknown Source)
        at java.desktop/javax.swing.JFileChooser.<init>(Unknown Source)
        at java.desktop/javax.swing.JFileChooser.<init>(Unknown Source)
        at jp.fourthline.mabiicco.FixFileChooser.<init>(Unknown Source)
        at jp.fourthline.mabiicco.ActionDispatcher.initializeFileChooser(Unknown Source)
        at jp.fourthline.mabiicco.ActionDispatcher.initialize(Unknown Source)
        at jp.fourthline.mabiicco.MabiIcco.initialize(Unknown Source)
        at jp.fourthline.mabiicco.MabiIcco.start(Unknown Source)
        at jp.fourthline.mabiicco.MabiIcco.main(Unknown Source)

解決方法

あやしいのはこれです。

sun.awt.shell.Win32ShellFolderManager2.get(Unknown Source)

これもキーワードにして探すとJDKの既知問題だということだそうです。

Loading...

MabiIcco-v1.5.6で報告された問題ですが、runtimeは以前より17.0.10なので、MabiIccoの問題ではなくruntimeの問題ようです。

17.0.15にバージョンアップしてみたところ解決するようでした。

JDKの修正は、17.0.12に入っているようですので、このバージョン以降であれば解決します。

8305072: Win32ShellFolder2.compareTo is inconsistent · openjdk/jdk17u@17d65fe
Backport-of: 2fcb816858406f33cefef3164b2c85f9f996c7da

今のところ発生事例がごくわずかであるため、MabiIccoの正式反映は次バージョンの予定です。同エラーでお困りの場合には連絡いただけると幸いです。