FXML Scripting and Nashorn Error Messages
A. Sundararajan
sundararajan.athijegannathan at oracle.com
Wed Jul 17 21:32:50 PDT 2013
Hi,
Addressing one of the questions:
* importClass : by default, Nashorn does not support importClass. But,
it is possible to load "mozilla_compat.js" to support rhino extensions
like importClass.
load("nashorn:mozilla_compat.js");
importClass(java.util.Vector);
Also, it is possible to write
var Vector = java.util.Vector;
or even better
var Vector = Java.type("java.util.Vector");
-Sundar
On Wednesday 17 July 2013 11:12 PM, Jim Laskey (Oracle) wrote:
> Going to forward to the fx experts.
>
>
> On 2013-07-17, at 1:55 PM, TA Hubbard <tahubbard at fxmlguide.com> wrote:
>
>> Dear Sirs;
>>
>> A fundamental feature of JavaFX's FXML is scripting. The process is simple; add the <?language javascript?> 'processing instruction' to standard FXML processing instructions (JavaFX import declarations or statements) then script.
>>
>> As you know, some of the scripting languages include JavaScript, JavaFX, and DSL's such as Groovy, Clojure, etc.
>>
>> Unfortunately, since build JDK8_91, if the above language processing instruction is included within an FXML document, Nashorn produces FXMLLoader _null pointer error_ messages during compilation with NetBeans (Windows Vista). Since JDK8_97, if nashorn.jar is manually included as a separate library within the application, no null pointer error messages are produced but we should not have to include a separate jar for FXML scripting.
>>
>> On the other hand, with the nashorn.jar manually included, the following sample button from Oracle's 'Introduction To FXML', works just fine:
>>
>> <Button text="Click Me!" onAction="java.lang.System.out.println('You clicked me!');"/>
>> This prints "You clicked me!" to the console.
>>
>> However, use of the <fx:script> tag to run a second sample from 'Introduction To FXML' produces multiple error messages:
>> <fx:script>
>> importClass(java.lang.System);
>> function handleButtonAction(event) {
>> System.out.println('You clicked me!');
>> }
>> </fx:script>
>> <Button text="Run JavaScript function by clicking" onAction="handleButtonAction(event);"/>
>>
>> The first error message produced is on JavaFX's own 'importClass' method, as follows:
>> ReferenceError: "importClass" is not defined in <eval> at line number 2 ... (I have found no reference where importClass has been deprecated)
>>
>> A second error message begins with the following:
>> Caused by: javax.script.ScriptException: ReferenceError: "handleButtonAction" is not defined in <eval> at line number 1 at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:426) ...
>>
>> Finally, doing a simple JavaFX object method call within FXML produces error messages on the following:
>> <Button fx:id="vanish" text="This button should vanish" />
>> <Button text="Press to remove the above button" onAction="vanish.setVisible(false)"/>
>>
>> One error message begins like this:
>> Caused by: javax.script.ScriptException: ReferenceError: "vanish" is not defined in <eval> at line number 1 at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:426) ...
>>
>> I hope you can restore these capabilities soon with Nashorn since they are central to advanced FXML scripting, and since they apparently worked well with the other JavaFX JavaScript engine. I was instructed to do a Jira on this, but I will wait your response first.
>>
>> Thank you.
>>
>> TAH
>>
>>
>>
More information about the nashorn-dev
mailing list