在Mac OS X上使用SWT和“lein repl”

时间:2012-12-26 22:20:15

标签: clojure swt read-eval-print-loop leiningen

我无法让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)

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:2)

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

(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

答案 1 :(得分:1)

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