2

我一直无法让 nREPL 在 Mac OS X 上使用 SWT。

要重现该问题,请使用以下 project.clj 文件创建一个新的 SWT 项目:

(defproject swttest "0.1.0"
  :description "Foo"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [org.eclipse.swt/org.eclipse.swt.cocoa.macosx.x86_64 "3.8"]]
  :jvm-opts ["-XstartOnFirstThread"]
  :repositories [["swt-repo" "https://swt-repo.googlecode.com/svn/repo/"]])

然后使用“lein repl”启动 REPL。最后,运行以下命令:

user> (org.eclipse.swt.widgets.Display.)

出现以下错误:

SWTException Invalid thread access  org.eclipse.swt.SWT.error (:-1)

我怎样才能让它工作?

4

2 回答 2

2

找到了解决方案。不要使用 nREPL,而是在“哑”REPL 中运行它,方法是修改 project.clj 文件以包含“哑铃”别名,如下所示:

(defproject swttest "0.1.0"
  :description "Foo"
  :dependencies [[org.clojure/clojure "1.4.0"]
                 [org.eclipse.swt/org.eclipse.swt.cocoa.macosx.x86_64 "3.8"]]
  :jvm-opts ["-XstartOnFirstThread"]
  :aliases {"dumbrepl" ["trampoline" "run" "-m" "clojure.main/main"]}
  :repositories [["swt-repo" "https://swt-repo.googlecode.com/svn/repo/"]])

然后运行:

> lein dumbrepl
于 2012-12-26T22:49:47.653 回答
1

lein 命令行启动几个 jvm。只有第一个使用 -XstartOnFirstThread参数运行。ps -aux|grep java您可以通过运行并查看 lein repl 的功能来验证这一点。这就是您的“dumbrepl”有效的原因。

于 2012-12-26T22:57:05.663 回答