2017-09-26 47 views
1

我正嘗試在Clojure中編寫JavaFX應用程序。作爲一個簡單的測試,我想嘗試啓動一個Hello World。要延長Application,我決定嘗試使用proxy而不是:gen-class。我希望能夠創建一個創建Application的簡單函數,而不是每次都要求我寫樣板。創建JavaFX代理會導致UnsupportedOperationException

我想出了一個簡單的例子是:

(let [^Application app 
     (proxy [Application] [] 
     (start [self stage] (println "Hello World")))] 

    (Application/launch ^Class (.getClass app) 
         (into-array String []))) 

的問題是,這會導致UnsupportedOperationException

UnsupportedOperationException異常啓動chat.graphics_tests.javafx_wrapper.proxy $ javafx.application.Application $ ff19274a.start(:-1)

它似乎找不到start方法t我實施的帽子。我的第一個想法是,start的論點是錯誤的。他們似乎是正確的。它收到的第一個參數是「this」,然後是主要階段。儘管我嘗試了不同數量的參數,但我仍然得到相同的錯誤。根據文檔:

如果接口方法不提供一種方法,FN,一個 則將拋出UnsupportedOperationException它應該是 調用。

更進一步我這個懷疑。

錯誤很模糊。有沒有人看到問題是什麼?

+0

我剛剛讀到'proxy'不能用在這裏,因爲'Application/launch'需要一個命名類。猜猜我正在使用':gen-class'。 – Carcigenicate

回答

0

在Clojure中編寫proxy類定義時,您不需要方法簽名中顯式的self參數。當前實例將隱式綁定到this,您可以在方法中使用該實例。

因此您的代理呼叫應該是這樣的:

(proxy [Application] [] 
    (start [stage] (println "Hello World"))) 
+0

不,同樣的錯誤。正如我所說,我嘗試了許多不同的論點組合。而且,正如我在我的回答下的評論中提到的那樣,我後來讀到'proxy'不能用在這裏。我決定留下這個問題以防其他人試圖使用'proxy'。我懷疑他們會得到相同的錯誤信息。 – Carcigenicate

相關問題