2017-09-26 11 views
1

ClojureでJavaFXアプリケーションを作成しようとしています。簡単なテストとして、私はHello Worldを立ち上げることを試みたかったのです。 Applicationを拡張するには、:gen-classの代わりにproxyを使用することにしました。毎回定型文を書くようにするのではなく、Applicationというベアボーン関数を作成したいと思っていました。JavaFXプロキシを作成すると、UnsupportedOperationExceptionが発生する

簡単な例私が思いついたとあった:

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

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

問題があり、これはUnsupportedOperationExceptionが発生します。

chat.graphics_tests.javafx_wrapper.proxy $ javafx.application.Applicationを開始するにUnsupportedOperationException $ ff19274a.start(:-1)

これは、startメソッドを見つけることができないようです私が実装した帽子。私の最初の考えは、startへの議論が間違っていたということでした。彼らは正しいようだ。受け取る最初の引数は "this"で、次にプライマリステージです。私は引数の数を試してみましたが、私はまだ同じエラーが発生します。ドキュメントによると:それは と呼ばれるべき

方法は、fnは、インターフェイスメソッドのために提供されていない場合は、 にUnsupportedOperationExceptionがスローされます。

さらにこの疑いがあります。

エラーはかなり曖昧です。誰が問題が何かを見ているのですか?

+0

'Application/launch'には名前付きクラスが必要なので、' proxy'はここでは使用できません。私は ':gen-class'を使っていると思います。 – Carcigenicate

答えて

0

Clojureにproxyクラス定義を記述する場合、メソッドシグネチャに明示的なselfパラメータは必要ありません。現在のインスタンスは、暗黙的にthisにバインドされ、メソッド内で使用することができます。 (答えの下部にあるコメントを参照してください、私はここに@Samを信頼しています。)

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

いいえ、同じエラーです。私が言ったように、私は多くの異なる組み合わせの議論を試みました。私の答えの中のコメントで述べたように、私は後で、 'proxy'はここでは使えないと読んでいます。他の誰かが 'proxy'を使用しようとしている場合に質問を残すことにしました。彼らは同じエラーメッセージを受け取るだろうと思う。 – Carcigenicate

関連する問題