创建JavaFX代理会导致不支持的操作异常

创建JavaFX代理会导致不支持的操作异常,javafx,clojure,Javafx,Clojure,我正在尝试用Clojure编写一个JavaFX应用程序。作为一个简单的测试,我想尝试启动一个Hello World。为了扩展应用程序,我决定尝试使用代理,而不是:gen class。我希望能够创建一个简单的函数来创建应用程序,而不是每次都要求我编写样板文件 我举了一个简单的例子: (let [^Application app (proxy [Application] [] (start [self stage] (println "Hello World")))]

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

我举了一个简单的例子:

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

  (Application/launch ^Class (.getClass app)
                      (into-array String [])))
问题是,这会导致
不支持操作异常

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

似乎找不到我实现的
start
方法。我的第一个想法是
start
的参数是错误的。不过,它们似乎是正确的。它收到的第一个参数是“
this
”,然后是主阶段。虽然我尝试了不同数量的参数,但仍然得到相同的错误。根据文件:

如果没有为接口方法提供方法fn,则 UnsupportedOperationException将被抛出 打电话来

这进一步加深了我的这种怀疑

这些错误相当模糊。有人知道问题出在哪里吗?

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

因此,您的代理调用应该如下所示:

  (proxy [Application] []
    (start [stage] (println "Hello World")))
在Clojure中编写类定义时,方法签名中不需要显式的
self
参数。当前实例将隐式绑定到此,您可以在方法内部使用该

因此,您的代理调用应该如下所示:

  (proxy [Application] []
    (start [stage] (println "Hello World")))
(见答案底部的评论。我相信@Sam)

我最终放弃并使用了
:gen class
,并在做了一些修改后使其正常工作。

(请参阅答案底部的注释。我相信@Sam)


我最终放弃并使用了
:gen类
,并在做了一些修改后使其工作。

我刚刚读到
代理
不能在这里使用,因为
应用程序/启动
需要一个命名类。我想我使用的是
:gen类
。我刚读到
代理
不能在这里使用,因为
应用程序/启动
需要一个命名类。我想我使用的是
:gen class
。不,同样的错误。正如我所说,我尝试了许多不同的论点组合。而且,正如我在回答下面的评论中提到的,我后来读到,
proxy
不能在这里使用。我决定不提这个问题,以防其他人试图使用
proxy
。我怀疑他们会收到同样的错误信息。不,同样的错误。正如我所说,我尝试了许多不同的论点组合。而且,正如我在回答下面的评论中提到的,我后来读到,
proxy
不能在这里使用。我决定不提这个问题,以防其他人试图使用
proxy
。我怀疑他们会收到同样的错误信息。