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

Apple M1(硅)芯片下Eclipse运行JavaFX17应用架构不兼容问题求解

Apple M1设备Eclipse运行JavaFX 17架构不兼容问题

更新: 经过多次尝试,我找到了该JavaFX / Apple M1(硅芯片) / Eclipse问题的临时解决方案:安装Eclipse 2021-09时,在安装程序的Java 11+ VM规范表单中使用JRE 17.0.0。

使用该JRE时,JavaFX应用可在Eclipse内成功启动。但若将项目JRE切换回其他Java 17版本,仍会出现下述问题。

问题描述

在全新Apple M1(硅芯片)笔记本上通过Eclipse运行JavaFX 17应用时,右键执行Hello World应用会抛出架构不匹配错误,其他运行场景则正常。

报错栈信息

Loading library prism_es2 from resource failed: java.lang.UnsatisfiedLinkError: /Users/due1/.openjfx/cache/17.0.0.1/libprism_es2.dylib: dlopen(/Users/due1/.openjfx/cache/17.0.0.1/libprism_es2.dylib, 1): no suitable image found.  Did find:
    /Users/due1/.openjfx/cache/17.0.0.1/libprism_es2.dylib: mach-o, but wrong architecture
    /Users/due1/.openjfx/cache/17.0.0.1/libprism_es2.dylib: mach-o, but wrong architecture
...

缓存库架构检查结果

Eclipse运行报错时的缓存文件架构:

due1@host 17.0.0.1 % file * 
libglass.dylib:       Mach-O 64-bit dynamically linked shared library arm64
libjavafx_font.dylib: Mach-O 64-bit dynamically linked shared library arm64
libprism_es2.dylib:   Mach-O 64-bit dynamically linked shared library x86_64
libprism_sw.dylib:    Mach-O 64-bit dynamically linked shared library x86_64

可以看到libprism_es2.dylib和libprism_sw.dylib为x86_64架构,不符合M1的arm64要求。

正常运行的场景

  1. 通过Eclipse的Maven命令执行,应用可正常运行:
...
[INFO] --- javafx-maven-plugin:0.0.6:run (default-cli) @ hellomvn ---
[INFO] Toolchain in javafx-maven-plugin null
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
  1. 导入IntelliJ 2021.2.x后可正常运行,此时缓存的prism库为arm64架构:
due1@host 17.0.0.1 % file *
libglass.dylib:       Mach-O 64-bit dynamically linked shared library arm64
libjavafx_font.dylib: Mach-O 64-bit dynamically linked shared library arm64
libprism_es2.dylib:   Mach-O 64-bit dynamically linked shared library arm64

问题根源

  • Eclipse版本架构适配缺陷:Eclipse 2021-09及更早版本没有原生Apple Silicon适配,默认通过Rosetta 2转译以x86_64架构运行。IDE自带的Java运行逻辑会继承主进程的架构标识,拉取对应x86_64版本的JavaFX prism相关原生库写入缓存,导致和项目JRE的arm64架构不匹配。你找到的JRE 17.0.0是专门适配Eclipse运行环境的原生arm64版本,能让Eclipse主进程以原生arm64运行,拉取正确架构的依赖库。
  • JavaFX缓存的架构匹配逻辑:JavaFX加载原生库时,会根据当前触发加载的进程架构拉取对应版本存到本地缓存,只要触发加载的进程是x86架构,就会写入x86版本的库,后续arm64架构的JVM读取缓存时就会报错。
  • 运行方式的进程隔离差异:Maven插件运行、IntelliJ的运行配置都会启动独立的JVM进程,不受IDE自身架构的影响,所以会拉取正确的arm64版本库。

其他解决方案

除了你提到的临时方案,还可以选择以下方式彻底解决问题:

  • 升级Eclipse到2022-03及更高版本,这些版本已经提供原生Apple Silicon适配包,安装对应arm64版本的Eclipse后,即可正常使用任意arm64版JRE 17+运行JavaFX项目。
  • 不升级Eclipse的前提下,在项目的运行配置中添加JVM参数-Djavafx.platform=macos-aarch64,强制JavaFX拉取arm64架构的原生库,每次修改配置后建议先删除~/.openjfx/cache/目录下的对应版本缓存避免复用旧的错误文件。
  • 统一使用Maven的javafx:run命令启动项目,完全规避IDE主进程架构的影响。

内容的提问来源于stack exchange,提问作者Eric D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:57:00