2013-07-14 66 views
4

我剛開始使用clojure和蹺蹺板製作GUI應用程序。它只是創建一個JFrame和一些組件。這是代碼。主函數除了調用start-gui之外什麼也不做,只要返回就退出。Clojure搖擺應用程序啓動時間

(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 uberjartime java -jar定時它。它報告了14.5秒。有什麼我做錯了嗎?我可以用3秒的時間啓動,但這是完全不可接受的。

回答

2

可悲的是,Clojure仍然有相當多的啓動時間。這主要是因爲Clojure加載所有必需的名稱空間時發生的編譯/代碼量。

對於我編寫的基於Swing的GUI應用程序,我經常在Java中編寫main入口點,以便您可以快速向用戶顯示初始GUI或啓動畫面 - 而應用程序的其餘部分/ Clojure代碼在後臺加載。

+0

它不編譯所有的clojure代碼到字節碼的編譯步驟(即當jar被製作時)?有沒有辦法強制它?會在'ns'子句的幫助中加入':gen-class'? – adrusi

+0

這可能會有所幫助。但是還有很多其他代碼(例如庫)沒有使用gen-class進行預編譯。因人而異。 – mikera