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 <[email protected]> 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




Reply via email to