JNI查找accessibilityHitTest失败:这个意外错误提示是什么意思?
Java银行应用
accessibilityHitTest错误解析 错误含义
这是macOS环境下Java AWT/Swing组件与系统无障碍服务的兼容性异常:JNI(Java本地接口)在调用系统无障碍API时,找不到accessibilityHitTest方法,最终在AppKit线程抛出java.lang.NoSuchMethodError。
触发原因(无代码变更却出现的核心原因)
- 系统层面的隐性变更:macOS自动更新了AppKit、HIServices等系统组件,或者系统无障碍服务(如VoiceOver、第三方辅助工具)被启用/更新,导致Java的AWT本地库(
libawt_lwawt.dylib、libosxapp.dylib)与系统API版本不匹配。 - 错误栈显示调用链从系统无障碍服务触发,经过AppKit传递到Java的AWT组件,JNI方法查找失败引发异常。
解决建议
- 临时关闭无障碍服务:打开「系统设置-辅助功能」,关闭所有启用的无障碍工具(包括系统自带和第三方),重启应用测试。
- 适配JDK版本:如果使用旧版JDK(如Java 8),升级至对应版本的最新补丁包;或切换为适配当前macOS版本的LTS JDK(如Temurin系列)。
- 重启系统:清除系统服务缓存,修复可能的临时API调用异常。
- 禁用Java无障碍支持:启动应用时添加JVM参数
-Dapple.awt.accessibilityEnabled=false,屏蔽AWT的无障碍功能,避免触发该调用。
错误日志原文
2022-07-22 09:56:40.685 java[12972:337712] Bad JNI lookup accessibilityHitTest 2022-07-22 09:56:40.686 java[12972:337712] ( 0 libawt_lwawt.dylib 0x000000013c66dc50 -[CommonComponentAccessibility accessibilityHitTest:] + 180 1 libawt_lwawt.dylib 0x000000013c62a78c -[AWTView accessibilityHitTest:] + 176 2 AppKit 0x00000001ab58b854 -[NSWindow(NSWindowAccessibility) accessibilityHitTest:] + 420 3 AppKit 0x00000001ab104ab0 -[NSApplication(NSApplicationAccessibility) accessibilityHitTest:] + 292 4 AppKit 0x00000001ab0d2180 CopyElementAtPosition + 160 5 HIServices 0x00000001add65340 _AXXMIGCopyElementAtPosition + 364 6 HIServices 0x00000001add89e28 _XCopyElementAtPosition + 356 7 HIServices 0x00000001add42d50 mshMIGPerform + 204 8 CoreFoundation 0x00000001a816d8c8 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 60 9 CoreFoundation 0x00000001a816d784 __CFRunLoopDoSource1 + 604 10 CoreFoundation 0x00000001a816bc18 __CFRunLoopRun + 2372 11 CoreFoundation 0x00000001a816ab34 CFRunLoopRunSpecific + 600 12 HIToolbox 0x00000001b0daa338 RunCurrentEventLoopInMode + 292 13 HIToolbox 0x00000001b0daa0b4 ReceiveNextEventCommon + 564 14 HIToolbox 0x00000001b0da9e68 _BlockUntilNextEventMatchingListInModeWithFilter + 72 15 AppKit 0x00000001aacd251c _DPSNextEvent + 860 16 AppKit 0x00000001aacd0e14 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1328 17 libosxapp.dylib 0x000000012eb50220 -[NSApplicationAWT nextEventMatchingMask:untilDate:inMode:dequeue:] + 144 18 AppKit 0x00000001aacc2fe0 -[NSApplication run] + 596 19 libosxapp.dylib 0x000000012eb4ffd8 +[NSApplicationAWT runAWTLoopWithApp:] + 208 20 libawt_lwawt.dylib 0x000000013c68c674 +[AWTStarter starter:headless:] + 488 21 libosxapp.dylib 0x000000012eb51c50 +[ThreadUtilities invokeBlockCopy:] + 28 22 Foundation 0x00000001a9070f94 __NSThreadPerformPerform + 212 23 CoreFoundation 0x00000001a816d044 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28 24 CoreFoundation 0x00000001a816cf90 __CFRunLoopDoSource0 + 208 25 CoreFoundation 0x00000001a816cc90 __CFRunLoopDoSources0 + 268 26 CoreFoundation 0x00000001a816b610 __CFRunLoopRun + 828 27 CoreFoundation 0x00000001a816ab34 CFRunLoopRunSpecific + 600 28 libjli.dylib 0x0000000102f8efec CreateExecutionEnvironment + 400 29 libjli.dylib 0x0000000102f8b1fc JLI_Launch + 1184 30 java 0x0000000102e57bb0 main + 408 31 dyld 0x000000010303508c start + 520 ) Exception in thread "AppKit Thread" java.lang.NoSuchMethodError: accessibilityHitTest
内容的提问来源于stack exchange,提问作者Datra
相关产品推荐
相关产品推荐

