1
我想了解如何正确设置JavaFX与Clojure项目一起工作。通过阅读各种来源,这是我想出:在Clojure中编写JavaFX项目
这是project.clj:
(defproject cljfx "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.8.0"]]
:resource-paths ["lib/jfxrt.jar"]
:main ^:skip-aot cljfx.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all}})
我不知道我是否应该使用:资源路径或添加的JavaFX到classpath通过:依赖矢量...
这是core.clj:
我已经基本上转化为Clojure的本教程的例子:
http://docs.oracle.com/javafx/2/get_started/hello_world.htm
(ns cljfx.core
(:gen-class
:extends javafx.application.Application)
(:import
[javafx.application Application]
[javafx.stage Stage]
[javafx.scene Scene]
[javafx.scene.control Button]
[javafx.scene.layout StackPane]
[javafx.event ActionEvent EventHandler]))
(defn -main [& args]
(Application/launch cljfx.core args))
(defn button [text]
(doto (Button.)
(.setText (str "Say " text))
(.setOnAction (proxy [EventHandler] []
(handle [event]
(println text))))))
(defn -start [primaryStage]
(let [root (doto (StackPane.)
(-> (.getChildren)
(.add (button "Hello World!"))))]
(doto primaryStage
(.setScene (Scene. root 300 250))
(.show))))
这不会编译,我不知道我在做什么错...你能帮我吗?
以下是错误: http://pastebin.com/sYeK7MJd
我的不好,我不知道......但是你用本地实例方法是什么意思?应该主要有[this&args]而不是[&args]?我注意到,将“this”添加到-start会使其起作用,但我无法在-main中使用它来代替cljfx.core,可以吗? –
不,主要是一个公共静态,就像一个全局函数。它所在的命名空间在project.clj中指定。开始,otoh是一个应用程序实例方法。它只能看到特定的实例或复制类Application中可用的字段。无论如何,这可能需要的其他地方是处理方法,它可能需要(处理[此事件] ...因为正在创建的是EventHandler的一个实例。 –
嗯没关系... project.clj?我仍然不能用'lein run'编译这个项目(它会抛出一个ClassNotFound异常与cljfx.core ...怪异的),但是如果我构建uberjar然后将它作为一个java程序来运行,它就可以工作。 。我应该使用:resource-paths还是:依赖项来添加javafx? –