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

Clojure未生成类致JavaFX项目运行失败求助

解决Clojure + JavaFX运行时ClassNotFoundException问题

问题原因

你的代码使用了:gen-class :extends javafx.application.Application,需要Clojure编译生成字节码文件,但默认运行命令未触发编译流程,导致找不到编译后的类文件,也无法生成target目录。同时JavaFX作为模块化库,运行时必须指定模块路径和模块参数,否则还会引发后续运行异常。

解决方案

步骤1:确认项目结构与命名空间匹配

确保代码文件路径为src/myname/myapp.clj,与命名空间myname.myapp完全对应——clj-new创建的项目默认遵循此结构,若手动修改过路径需调整一致。

步骤2:更新deps.edn配置

修改deps.edn,添加JavaFX的JVM模块参数,确保运行配置能触发编译:

{:deps
 {org.clojure/clojure {:mvn/version "1.11.1"}
  org.openjfx/javafx-controls {:mvn/version "17.0.2"}
  org.openjfx/javafx-base {:mvn/version "17.0.2"}
  org.openjfx/javafx-graphics {:mvn/version "17.0.2"}
  org.openjfx/javafx-media {:mvn/version "17.0.2"}
  org.openjfx/javafx-web {:mvn/version "17.0.2"}}

 :aliases
 {:run-m {:main-opts ["-m" "myname.myapp"]
          :jvm-opts ["--module-path" "/你的JavaFXSDK路径/lib"
                     "--add-modules" "javafx.controls,javafx.base,javafx.graphics,javafx.media,javafx.web"]}}}

注意:替换/你的JavaFXSDK路径为本地JavaFX SDK的实际路径,例如/Users/xxx/Downloads/javafx-sdk-17.0.2

步骤3:编译并运行项目

有两种可行的运行方式:

方式一:手动编译后运行

  1. 执行编译命令,生成target目录和类文件:
clj -M compile myname.myapp
  1. 运行项目:
clj -M:run-m

方式二:直接运行(自动触发编译)

直接执行带主命名空间的命令,Clojure会自动编译带:gen-class的文件:

clj -M --module-path "/你的JavaFXSDK路径/lib" --add-modules "javafx.controls,javafx.base,javafx.graphics,javafx.media,javafx.web" -m myname.myapp

额外说明

  • 若不想手动指定JavaFX SDK路径,可使用Maven依赖的自动模块参数,但需确保JDK版本为11+(JavaFX 17要求)。
  • 确认macOS系统的JDK版本与JavaFX 17兼容,建议使用JDK 17。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:37:08