0

我尝试创建一个扩展 Java 类的类的实例,并在该实例中添加一些类成员变量。这是我的尝试:

var ui = Java.extend(javax.swing.JPanel, { 
    cb : new JCheckBox("A checkbox", true),
});

然而,Nashorn 解释器抛出这个错误:“TypeError: function noSuchMethod () { [native code] } is not a constructor function”

我究竟做错了什么?当我添加一个自定义类的实例(如 se.datadosen.util.Stopwatch)时,Nashorn 没有抱怨,但是当我尝试添加该 JCheckBox 时它会引发此错误。

(我知道通过 .add() 调用将组件添加到面板中,但这个问题实际上是关于如何将类成员变量添加到子类。

4

2 回答 2

1

Java.extend允许您将在 JavaScript 中实现的方法添加到 Java 类(实际上是创建一个新类来继承 Java 类)。至少根据文档,它不允许您添加任意属性。请参阅The Nashorn Java API,其中说:

您可以使用 Java.extend() 函数扩展一个类,该函数将 Java 类型作为第一个参数,将方法实现(以 JavaScript 函数的形式)作为其他参数。”(强调添加)

您正在尝试添加一个对象作为类的属性,至少是您的代码目前编写的方式。

于 2014-09-23T14:34:00.003 回答
0

javax.swing.JCheckBox 而不是 JCheckBox ?

于 2014-09-23T13:52:54.290 回答