You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Netbeans13打开项目/浏览文件报IllegalArgumentException异常

Netbeans 13 打开项目触发IllegalArgumentException问题

问题现象

在Netbeans 13中执行打开项目、点击浏览按钮选择文件等调用系统文件选择器的操作时,会弹出如下错误提示,文件选择窗口无法正常显示,新建项目功能可正常使用。分别使用JDK8、JDK11作为Netbeans运行环境,问题均会复现。

java.lang.IllegalArgumentException 异常已发生。
请前往Netbeans官方问题反馈渠道提交报告,提交时请将messages.log日志文件作为附件一并上传。

问题现象参考截图:
Netbeans无法弹出文件选择窗口

错误日志

JDK8运行环境错误栈

java.lang.IllegalArgumentException: Comparison method violates its general contract!
    at java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:866)
    at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:483)
    at java.util.ComparableTimSort.mergeForceCollapse(ComparableTimSort.java:422)
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:222)
    at java.util.Arrays.sort(Arrays.java:1246)
    at sun.awt.shell.Win32ShellFolderManager2.get(Win32ShellFolderManager2.java:282)
    at sun.awt.shell.ShellFolder.get(ShellFolder.java:258)
    at javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel.addItem(MetalFileChooserUI.java:942)
    at javax.swing.plaf.metal.MetalFileChooserUI$DirectoryComboBoxModel.access$800(MetalFileChooserUI.java:910)
    at javax.swing.plaf.metal.MetalFileChooserUI.doDirectoryChanged(MetalFileChooserUI.java:659)
    at javax.swing.plaf.metal.MetalFileChooserUI.access$1100(MetalFileChooserUI.java:53)
    at javax.swing.plaf.metal.MetalFileChooserUI$5.propertyChange(MetalFileChooserUI.java:748)
    at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
    at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
    at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
    at java.awt.Component.firePropertyChange(Component.java:8434)
    at javax.swing.JFileChooser.setCurrentDirectory(JFileChooser.java:598)
    at javax.swing.JFileChooser.<init>(JFileChooser.java:344)
    at javax.swing.JFileChooser.<init>(JFileChooser.java:296)
    at org.netbeans.modules.project.ui.ProjectChooserAccessory$ProjectFileChooser.<init>(ProjectChooserAccessory.java:507)
    at org.netbeans.modules.project.ui.ProjectChooserAccessory$ProjectFileChooser.<init>(ProjectChooserAccessory.java:507)
    at org.netbeans.modules.project.ui.ProjectChooserAccessory.createProjectChooser(ProjectChooserAccessory.java:442)
    at org.netbeans.modules.project.ui.actions.OpenProject.actionPerformed(OpenProject.java:61)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289)
    at java.awt.Component.processMouseEvent(Component.java:6539)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6304)
    at java.awt.Container.processEvent(Container.java:2239)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2297)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    at java.awt.Container.dispatchEventImpl(Container.java:2283)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    at java.awt.EventQueue$4.run(EventQueue.java:733)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
    at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136)
[catch] at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

JDK11运行环境错误栈

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.mergeForceCollapse(ComparableTimSort.java:426)
    at java.base/java.util.ComparableTimSort.sort(ComparableTimSort.java:222)
    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:8731)
    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:308)
    at org.netbeans.modules.project.ui.ProjectChooserAccessory$ProjectFileChooser.<init>(ProjectChooserAccessory.java:507)
    at org.netbeans.modules.project.ui.ProjectChooserAccessory$ProjectFileChooser.<init>(ProjectChooserAccessory.java:507)
    at org.netbeans.modules.project.ui.ProjectChooserAccessory.createProjectChooser(ProjectChooserAccessory.java:442)
    at org.netbeans.modules.project.ui.actions.OpenProject.actionPerformed(OpenProject.java:61)
    at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
    at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
    at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
    at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
    at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
    at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:297)
    at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:297)
    at java.desktop/java.awt.Component.processMouseEvent(Component.java:6635)
    at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
    at java.desktop/java.awt.Component.processEvent(Component.java:6400)
    at java.desktop/java.awt.Container.processEvent(Container.java:2263)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5011)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843)
    at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4918)
    at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4547)
    at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4488)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4843)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
    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:742)
    at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136)
[catch] 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)

问题原因

该错误是Windows平台下JDK Swing组件的已知兼容问题:文件选择器初始化时会枚举系统“此电脑”下的所有驱动器、特殊文件夹,当系统存在失效的网络映射驱动器、断开连接的虚拟存储设备、异常第三方Shell扩展时,枚举返回的文件夹对象排序逻辑不满足比较器传递性要求,JDK7之后默认启用的TimSort排序算法检测到契约违反就会抛出该异常,和Netbeans本身的项目模块逻辑无关,更换JDK大版本也无法修复。

解决方案

按优先级依次尝试以下操作即可修复:

  • 清理系统异常挂载项:打开“此电脑”,删除所有标记为断开的网络映射驱动器,卸载/弹出不存在的虚拟光驱、已断开的存储设备挂载项,完成后重启Netbeans重试
  • 添加JVM启动参数绕过排序校验:找到Netbeans安装目录下etc/netbeans.conf配置文件,定位到netbeans_default_options配置行,在配置值末尾追加参数-Djava.util.Arrays.useLegacyMergeSort=true,保存后重启Netbeans,该参数会让JDK使用旧版归并排序替代TimSort,跳过比较器契约校验
  • 更换IDE外观主题:打开Netbeans设置,在外观配置项中将默认Metal主题更换为Windows原生主题,避开Metal主题下文件选择器的目录枚举排序逻辑

内容的提问来源于stack exchange,提问作者d4rkm1nt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:54:19