2014-09-23 2 views
0

Я пытаюсь создать экземпляр класса, который расширяет класс Java, и в этом случае добавьте некоторые переменные-члены класса. Вот моя попытка:Как расширить Java-класс в Nashhorn JavaScript и добавить переменные-члены класса

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

Однако интерпретатор Nashorn бросает эту ошибку: "TypeError: функция noSuchMethod() {[машинный код]} не является функцией конструктора"

Что я делаю неправильно? Nashorn не жаловался, когда я добавил экземпляр пользовательского класса, например se.datadosen.util.Stopwatch, но он выдает эту ошибку, когда я пытаюсь добавить этот JCheckBox.

(я знаю компоненты добавлены к панелям с вызовом .add(), но этот вопрос на самом деле о том, как добавить переменные-члены класса к подклассу.

ответ

0

javax.swing.JCheckBox вместо JCheckBox?

+0

Спасибо. Weird сообщение об ошибке для отсутствия javax.swing –

0

Java.extend позволяет добавлять методы, реализованные в JavaScript для Java-класса (на самом деле, для создания нового класса, который подклассы класса Java). Он не позволяет добавлять произвольные свойства, по крайней мере, согласно документации. См. The Nashorn Java API, в котором говорится:

You can extend a class using the Java.extend() function that takes a Java type as the first argument and method implementations (in the form of JavaScript functions) as the other arguments." (emphasis added)

Вы пытаетесь добавить объект как собственность этого класса, по крайней мере, как ваш код в настоящее время написан.

+1

Спасибо. Квалификационный JCheckBox с javax.swing. фактически делает эту декларацию «компилируемой», но, похоже, она не работает. Невозможно добавить свойства к подклассу Java? Это можно сделать в BeanShell, который является скриптовой Java. –