Clojure 将SWT与“一起使用”;莱因·雷普;在MacOSX上
我一直无法让nREPL在MacOSX上与SWT一起工作 要重现该问题,请使用以下project.clj文件创建一个新的SWT项目:Clojure 将SWT与“一起使用”;莱因·雷普;在MacOSX上,clojure,swt,read-eval-print-loop,leiningen,Clojure,Swt,Read Eval Print Loop,Leiningen,我一直无法让nREPL在MacOSX上与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-opt
(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/"]])
然后使用“leinrepl”启动REPL。最后,运行以下命令:
user> (org.eclipse.swt.widgets.Display.)
出现以下错误:
SWTException Invalid thread access org.eclipse.swt.SWT.error (:-1)
我如何才能让它工作?找到了解决方案。不要使用nREPL,而是在“dumb”REPL中运行它,方法是修改project.clj文件以包含“dumbrepl”别名,如下所示:
(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
lein命令行启动几个JVM。只有第一个使用-
XstartOnFirstThread
参数运行。您可以通过运行ps-aux | grep java
并查看lein repl的功能来验证这一点。这就是为什么你的“dumbrepl”有效。谢谢你提供的信息。这基本上就是我想出来的。