创建JavaFX代理会导致UnsupportedOperationException

时间:2017-09-26 18:49:24

标签: javafx clojure

我试图在Clojure中编写JavaFX应用程序。作为一个简单的测试,我想尝试启动一个Hello World。为了扩展Application,我决定尝试使用proxy代替:gen-class。我希望能够创建一个创建Application的简单函数,而不是每次都要求我编写样板文件。

我想出的一个简单例子是:

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

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

问题是,这会导致UnsupportedOperationException

  

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

似乎无法找到我实施的start方法。我的第一个想法是start的论据是错误的。他们似乎是正确的。它收到的第一个参数是" this",然后是主要阶段。我尝试了不同数量的参数,但我仍然得到同样的错误。根据文件:

  

如果没有为接口方法提供方法fn,则   如果是,则抛出UnsupportedOperationException   调用。

这进一步引起了我的怀疑。

错误相当模糊。有谁看到问题是什么?

2 个答案:

答案 0 :(得分:0)

在Clojure中编写mod_rewrite documentation类定义时,您不需要方法签名中的显式self参数。当前实例将隐式绑定到this,您可以在方法中使用它。

因此,您的代理呼叫应如下所示:

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

答案 1 :(得分:0)

This appears to be because Application/launch requires a named class, which proxy doesn't create.(请参阅答案底部的评论。我在这里信任@Sam。)

我最终塌方并使用:gen-class,并在一些小小的事情后得到了它。