MacOS运行JavaFX应用时出现NSInternalInconsistencyException错误
MacBook上JavaFX应用运行错误排查与解决
错误日志
/usr/local/Cellar/openjdk@11/11.0.18/libexec/openjdk.jdk/Contents/Home/bin/java -javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=59280:/Applications/IntelliJ IDEA CE.app/Contents/bin -Dfile.encoding=UTF-8 -classpath /Users/sharkvary/.m2/repository/org/openjfx/javafx-controls/17.0.2/javafx-controls-17.0.2.jar:/Users/sharkvary/.m2/repository/org/openjfx/javafx-graphics/17.0.2/javafx-graphics-17.0.2.jar:/Users/sharkvary/.m2/repository/org/openjfx/javafx-base/17.0.2/javafx-base-17.0.2.jar:/Users/sharkvary/.m2/repository/org/openjfx/javafx-fxml/17.0.2/javafx-fxml-17.0.2.jar -p /Users/sharkvary/.m2/repository/org/openjfx/javafx-graphics/17.0.2/javafx-graphics-17.0.2-mac.jar:/Users/sharkvary/.m2/repository/org/openjfx/javafx-fxml/17.0.2/javafx-fxml-17.0.2-mac.jar:/Users/sharkvary/.m2/repository/org/openjfx/javafx-base/17.0.2/javafx-base-17.0.2-mac.jar:/Users/sharkvary/.m2/repository/org/openjfx/javafx-controls/17.0.2/javafx-controls-17.0.2-mac.jar:/Users/sharkvary/Dev-sharkvary/workspace-intellij/test/target/classes -m com.example.test/com.example.test.HelloApplication 2023-01-23 23:20:16.248 java[8301:107116] *** Assertion failure in -[_NSTrackingAreaAKViewHelper removeTrackingRect:], _NSTrackingAreaAKManager.m:1602 2023-01-23 23:20:16.251 java[8301:107116] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '0x0 is an invalid NSTrackingRectTag. Common possible reasons for this are: 1. already removed this trackingRectTag, 2. Truncated the NSTrackingRectTag to 32bit at some point.' *** First throw call stack: ( 0 CoreFoundation 0x00007ff81a3f140b __exceptionPreprocess + 242 1 libobjc.A.dylib 0x00007ff819f3de25 objc_exception_throw + 48 2 Foundation 0x00007ff81b294fb0 -[NSCalendarDate initWithCoder:] + 0 3 AppKit 0x00007ff81db79490 -[_NSTrackingAreaAKViewHelper removeTrackingRect:] + 190 4 libglass.dylib 0x00000001306104e9 -[GlassViewDelegate setFrameSize:] + 361 5 libglass.dylib 0x0000000130615d68 -[GlassView3D setFrameSize:] + 88 6 AppKit 0x00007ff81d5037f5 -[NSView setFrame:] + 347 7 libglass.dylib 0x0000000130615dc5 -[GlassView3D setFrame:] + 69 8 AppKit 0x00007ff81d514645 -[NSView resizeWithOldSuperviewSize:] + 694 9 AppKit 0x00007ff81d513f76 -[NSView resizeSubviewsWithOldSize:] + 488 10 AppKit 0x00007ff81d4f363a -[NSView setFrameSize:] + 1460 11 AppKit 0x00007ff81d5037f5 -[NSView setFrame:] + 347 12 AppKit 0x00007ff81d514645 -[NSView resizeWithOldSuperviewSize:] + 694 13 AppKit 0x00007ff81d513f76 -[NSView resizeSubviewsWithOldSize:] + 488 14 AppKit 0x00007ff81d4f363a -[NSView setFrameSize:] + 1460 15 AppKit 0x00007ff81d51237a -[NSThemeFrame setFrameSize:] + 482 16 AppKit 0x00007ff81d511a3c -[NSWindow _oldPlaceWindow:fromServer:] + 813 17 AppKit 0x00007ff81d50fff1 -[NSWindow _setFrameCommon:display:fromServer:] + 1684 18 libglass.dylib 0x0000000130607acf -[GlassWindow(Java) _setFlipFrame:display:animate:] + 239 19 libglass.dylib 0x00000001306075cc -[GlassWindow(Java) _setWindowFrameWithRect:withDisplay:withAnimate:] + 268 20 libglass.dylib 0x000000013060781b -[GlassWindow(Java) _setBounds:y:xSet:ySet:w:h:cw:ch:] + 571 21 libglass.dylib 0x00000001306212fe Java_com_sun_glass_ui_mac_MacWindow__1setBounds2 + 446 22 ??? 0x0000000113b72a10 0x0 + 4625738256 ) libc++abi: terminating with uncaught exception of type NSException Process finished with exit code 134 (interrupted by signal 6: SIGABRT)
环境信息
- OS:Ventura 13.1
- IDE:IntelliJ Community 2022.3.1
- Java:brew安装的openJDK 11
- OpenJDK版本"11.0.18" 2023-01-17
- OpenJDK Runtime Environment Homebrew (build 11.0.18+0)
- OpenJDK 64-Bit Server VM Homebrew (build 11.0.18+0, mixed mode)
- 应用:IntelliJ新建的JavaFX Maven示例项目
错误原因
这是macOS Ventura系统与旧版JavaFX的兼容性问题,核心是JavaFX的窗口管理组件(libglass.dylib)在处理窗口大小调整时,对macOS的NSTrackingRectTag管理出现异常,导致无效标签被重复移除或截断,触发AppKit的断言失败。
具体来说,JavaFX 17.0.2版本对Ventura系统的窗口跟踪区域适配不完善,加上单独的OpenJDK 11与JavaFX的组合在新系统下的兼容性问题,最终引发崩溃。
解决方法
升级JavaFX版本
将项目中的JavaFX依赖升级到17.0.7及以上的LTS版本,或直接使用最新的JavaFX版本。后续版本修复了Ventura系统下的窗口管理相关bug,能有效避免该错误。使用捆绑JavaFX的JDK
替换当前的OpenJDK为Zulu JDK(Azul提供的带JavaFX捆绑的版本),确保JDK与JavaFX版本完全兼容,减少系统适配问题。添加JVM启动参数
在IntelliJ的运行配置中,添加以下JVM参数之一,禁用可能触发错误的窗口特性:-Dglass.mac.useScreenMenuBar=false-Djavafx.mac.windowStyle=plain
检查运行配置依赖
确认IntelliJ的运行配置中,模块路径(--module-path)和依赖库没有重复或冲突的JavaFX组件,确保只加载对应macOS平台的JavaFX库。
内容的提问来源于stack exchange,提问作者user4182972
相关产品推荐
相关产品推荐

