Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Invoke java using JavaScript inside JavaFX. Is it possible?

I am using WebEngine & WebView from JavaFX. Now I want to execute Java using javascript running inside WebEngine.

My question is if it is possible to do so and if yes any hints.

I want do something like below

<script type="text/javascript">
  function runSampleJava() {
    var number = new java.lang.Integer(1234);
    var random = new java.util.Random();
    java.lang.System.out.println(random.nextInt());
  }
</script>

Now if I call the runSampleJava() inside WebEngine it will execute that code.


Points to be noted

  • This is not about Rhino JavaScript engine for java
  • I know it is possible to inject java object, eg: JSObject window = (JSObject) webEngine.executeScript("window"); and so on. But this is not what I am looking for.
like image 808
Kowser Avatar asked Oct 06 '22 09:10

Kowser


1 Answers

I didn't manage to create Java instances but the thing I managed to do is to push object instances created in Java into JavaScript and call back to them.

So my Java-Code looks like this:

JSObject win = (JSObject) engine.executeScript("window");
win.setMember("jHelper", new JavaHelper());

JavaHelper example (must be public):

public static class JavaHelper {
    public int newInteger(int input) {
        // ...
    }
    public Random newRandom() {
        // ...
    }
}

And then then in JavaScript:

function bla() {
  var number = jHelper.newInteger(1234);
  var random = jHelper.newRandom();
  // ...
}

You can see my work where I communicate between Java and JavaScript back and forth at https://github.com/tomsontom/fx-ide/tree/master/at.bestsolution.javafx.ide.editor and in action at http://tomsondev.bestsolution.at/2012/10/29/eclipsecon-javafx-demo-app-videos/

like image 160
tomsontom Avatar answered Oct 10 '22 03:10

tomsontom