我无法让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)
我怎样才能让它发挥作用?
答案 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”有效的原因。