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? –