For scripting languages that possess javax.script (part of Java since Java 1.6/6!) implementations the JavaFX infrastructure is of a great attractivity.
JavaFX would allow script programmers for creating platform independent GUIs to take fully advantage for their own purposes, i.e. "surfing on Java" to get at a modern, maintained, up-to-date GUIs in an open manner! Of course, scripting support in form of Nashorn/ECMAScript/Javascript is on board of modern Java distributions, however there are many more javax.script scripting languages available. (In my case I am very interested in ooRexx, the opensource version of IBM's Open Object Rexx, which is a very easy to learn, yet powerful OO language, and am the author of the JSR-223 implementation of ooRexx, which will be included in the next distribution of BSF4ooRexx which is a bridge between ooRexx and Java.) While evaluating the possibilities (for non-informatic students) of taking advantage of the JavaFX infrastructure, I have been experimenting and exploring the JavaFX infrastructure. Being acquainted with the details of javax.script/JSR223 it has been very interesting to learn how javax.script is being deployed on JavaFX. Basically, using SceneBuilder and then manually editing the FXML file it becomes possible to run any scripting programs from (I assume FXMLLoader), given that there is a processing instruction like e.g. <?language rexx?> or <?language Nashorn?> which causes FXMLLoader to load the denoted scripting language by name. As a result all script code, be it defined in fx:script elements with a source attribute pointing to the file containing the script code or any code supplied in attributes like "onAction" will be executed with this denoted scripting engine. This is it. Nothing else is currently available. Not even employing javax.script programming languages in the context of a WebView/WebEngine, although HTML defines a "type" attribute for the "script" element! E.g, it is not possible to employ more than one script language for the same document, although this is plain easy! Or, it is not possible to have script controllers defined (only Java controllers) in SceneBuilder. Or it is not possible to use javafxpackager to create a jar-file with pure javax.script code and JavaFX resources, as there is no support to denote a script to be used as the "main class". --- As this is the JavaFX developer list, I would like to propose in this e-mail very few and (really! :) ) easy to implement enhancements that immediately would increase the usability and the attractiveness of JavaFX for script writers. If there is an official tracker infrastructure where I could post at least the simple enhancements, please advise! --- 1. Suggestion # 1: wherever script code can be denoted, allow a "type" attribute with the mime type value of the javax.script engine to be used to execute the script code. Whenever such a "type" attribute is found, one can load the respective javax.script engine by merely using javafx.script.ScriptManager.getEngineByMimeType(mimeType) and then have it execute the script code. FXML candidates are the fx:script element itself as well as all attributes (like "onAction") that allow to denote script code. But also in HTML 5 (WebView/WebEngine) the script element and its "type" attribute (cf. <https://www.w3.org/TR/html5/scripting-1.html>). * Examples in FXML-documents: <fx:script source="myProgram.js" type="text/javascript" /> <fx:script source="myProgram.rex" type="text/x-rexx-java" /> * Example in any fx-elements that have attributes that allow code: <Button fx:id="button" layoutX="170.0" layoutY="89.0" onAction= "use arg slotDir /* always supplied by BSF4ooRexx as the last argument */ ; call klickButtonAction slotDir /* now process the event, pass on slotDir */ ;" type="text/x-rexx-java" text="Click Me!" textFill="GREEN" /> 2. Suggestion # 2: whenever (probably FXMLLoader, WebEngine) execute javax.script code, then please add the following entries to javax.script.ScriptContext.LOCAL_SCOPE javax.script.Bindings: 1. if the "source" attribute (script-element in HTML 5, fx:script-element in FXML) denotes a file name, then use the key javax.script.Engine.FILENAME and store the value of "source" in the LOCAL_SCOPE Bindings. The scripting engine implementation is then able to supply that name to the script program (e.g. in the case of a runtime error, or for debugging purposes), which currently is not possible. 2. if arguments are to be passed to the script code, then create a Java array object with the arguments, use the key javax.script.Engine.ARGV and store the Java array with it. The scripting engine implementation is supposed to pass on these arguments in the scripting language's format, which currently is not possible. As you can see, these are very few suggestions, but for javax.script language programmers (no matter which languages they use and mix) they immediately improve the usability of JavaFX tremendeously! It would be great, if someone would be able and willing to implement these little suggestions (probably in the FXMLLoader and WebEngine classes). If there is anything I could do to help, please let me know (also, if anyone can point me to a formal way of submitting these requests for enhancements to a JavaFX-tracker related system, I would appreciate it). ---rony P.S.: It may be the case that the original javax.script developer(s) in JavaFX have departed and no one else has a working knowledge of javax.script. Even if that would be the case the above suggestions would be still very easy to implement for any professional Java programmer! In case there would be javax.script related questions that I can answer (I served as an expert on JSR-223 that defined the javax.script framework), I would be more than happy to do so. P.P.S.: If anyone can point me at the trackers for the Java development kit's "jrunscript.exe" (can only run Nashorn scripts, running other script engines causes errors despite documenting, that that should be possible) and to the Nashorn bug tracker (its script factory creates output statements with syntax errors that Nashorn throws up upon), I would file the found bugs there.