4

我刚开始使用 clojure 和跷跷板制作一个 GUI 应用程序。它只创建了一个 JFrame 和几个组件。这是代码。主函数什么也不做,只是start-gui在它返回后立即调用并退出。

(ns pause.gui
  (:use seesaw.core))

(native!)
; (javax.swing.UIManager/setLookAndFeel
;   "org.pushingpixels.substance.api.skin.SubstanceGraphiteLookAndFeel")

(def main-window
  (frame :title    "Pause"
         :on-close :exit))

(def sidebar (listbox :model []))
(def main-area (text :multi-line? true
                     :font "MONOSPACED-PLAIN-14"
                     :text "test"))

(def main-split
  (left-right-split (scrollable sidebar)
                    (scrollable main-area)
                    :divider-location 1/5))

(defn setup-main-window
  "Fills the main window with its content"
  [main-window]
  (config! main-window
           :content main-split)
  main-window)

(defn start-gui
  "Create the main window"
  []
  (-> main-window
      setup-main-window
      pack!
      show!))

我使用编译lein uberjar它并使用time java -jar. 它报告了 14.5 秒。有什么我做错了吗?我可以接受 3 秒的启动,但这是完全不能接受的。

4

1 回答 1

2

遗憾的是,Clojure 仍有相当长的启动时间。这主要是因为 Clojure 在所有必需的命名空间中加载时发生的编译/代码加载量。

对于我编写的基于 Swing 的 GUI 应用程序,我经常用mainJava 编写入口点,以便您可以快速向用户显示初始 GUI 或启动屏幕 - 而其余的应用程序/Clojure 代码加载的背景。

于 2013-07-15T08:57:57.700 回答