Question

I would like to be able to call with javascript a function of my JNLP class. Let's assume in my applet I have a function defined like this: public String returnSomething(){ return "bla"; }

   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- ########################## IMPORTANT NOTE ############################ -->
<!-- This preview HTML page will work only with JDK 6 update 10 and higher! -->
<!-- ###################################################################### -->
<html>
    <head>
        <title>Test page for launching the applet via JNLP</title>
    </head>
    <body>
        <h3>Test page for launching the applet via JNLP</h3>
        <script src="http://java.com/js/deployJava.js"></script>
        <script>
            var attributes = {
                code:       "winToJnaApi.NewApplet",
                archive:    "JavaApplication6.jar, lib/jna.jar, lib/platform.jar",
                width:      300,
                height:     300,
                name:       "applet",
                id:         "app"
            };
            var parameters = {jnlp_href:"launch.jnlp"}; <!-- Applet Parameters -->
            var version = "1.5"; <!-- Required Java Version -->
            deployJava.runApplet(attributes, parameters, version);
        </script>

    <input type = "button" value ="click" onClick = "document.write(document.getElementById("app").doSomething())">
    <script type="text/javascript">
        document.write(document.getElementById("app"));
    </script>
    </body>
</html>

Is this the proper way to call JNLP-deployed applet functions from javascript? Cause this one doesn't give me anything.

Was it helpful?

Solution

I got it a long time ago, but I forgot to answer my own question. So here it is:

Let's assume you define your applet like this:

<applet id="appletToTest" width=500 height=500 code="com.sample.SampleApplet" archive="JavaApplication6.jar, lib/lib1.jar, lib/lib2.jar">
   <param name="jnlp_href" value="launch.jnlp">
 </applet>

You can get a javascript! handle to the applet like this:

var parentAPPLET = document.getElementById("appletToTest");

Now, whatever method you have in your applet, it better return String or a primitive value, but even if it doesn't you may operate on it assuming you know its methods. Continuing my example from above, if in your applet you have a function defined like this:

public String returnSomething(){ return "bla"; }

Then you can call it with your javascript like this:

var parentAPPLET = document.getElementById("appletToTest");
alert (parentAPPLET.returnSomething()); 

And congratulations, you called a Java Applet method from javascript that was deployed by JWS.

There is another way of doing that but it would work only in Firefox, so better use this one. LiveConnect rules still apply, even though the technology is deprecated.

OTHER TIPS

I understand that applets launched using JNLP are no longer accessible to JS, but I might be wrong. To investigate it further, I would recommend removing the deployJava.js and hard coding the applet element.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top