Clojure 将SWT与“一起使用”;莱因·雷普;在MacOSX上

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

我一直无法让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-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”有效。

谢谢你提供的信息。这基本上就是我想出来的。