求助:Mac下JavaFX启动遇com.sun.glass.ui.mac超时警告,GUI无法打开
问题:JavaFX应用在macOS Sonoma上无法启动,出现app reactivation超时警告
环境信息
- IntelliJ IDEA CE 2023.3(社区版)
- JDK版本:17.0.9+7-b1087.7 aarch64(JetBrains OpenJDK),已尝试升级至21.0.1
- 操作系统:macOS 14.1.2(Sonoma)
- 项目类型:JavaFX新项目
问题现象
- 运行默认
Application.java文件(含项目内SQL数据库连接逻辑)时,控制台抛出警告:
com.sun.glass.ui.mac.MacApplication lambda$waitForReactivation$6
WARNING: Timeout while waiting for app reactivation
- MacBook Air程序坞出现名为“java”的图标,5秒后自动关闭,GUI界面始终无法加载
- 已尝试更新JDK、IntelliJ IDEA、升级系统,问题未解决
解决思路
1. 校验JavaFX运行配置
- 确认IntelliJ运行配置的
VM options中,已正确配置JavaFX模块路径与依赖模块,格式示例:--module-path /本地/javafx-sdk/lib --add-modules javafx.controls,javafx.fxml - 注意使用aarch64架构的JavaFX SDK,与本地JDK架构保持一致
2. 禁用macOS App Nap功能
- 在终端执行命令,针对Java应用关闭App Nap:
defaults write com.oracle.java.JavaAppLauncher NSAppSleepDisabled -bool true - 执行后重启IntelliJ与应用,测试启动情况
3. 排查SQL连接代码的阻塞影响
- 暂时注释所有SQL数据库初始化代码,仅运行纯JavaFX默认界面,验证是否为数据库操作阻塞UI线程
- 若注释后可正常启动,需将数据库操作移至后台线程(使用
Task或CompletableFuture),避免阻塞UI初始化
4. 添加VM参数调整JavaFX行为
- 在运行配置的
VM options中添加以下参数,强制UI线程适配:-Djava.awt.headless=false -Djavafx.macos.embedded=true - 或禁用超时检测:
-Dglass.uiThreadTimeout=0
5. 匹配JavaFX与JDK版本
- 确保JavaFX SDK版本与JDK版本兼容(如JDK 21对应JavaFX 21),优先使用Gluon或官方提供的SDK包
6. 重置IntelliJ缓存
- 执行
File > Invalidate Caches... > Invalidate and Restart,清除缓存后重新配置项目
内容的提问来源于stack exchange,提问作者Peyton Cusick
相关产品推荐
相关产品推荐

