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