Pergunta

Eu gostaria de poder ligar com o JavaScript uma função da minha classe JNLP. Vamos supor no meu applet que tenho uma função definida assim: 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>

Essa é a maneira correta de chamar funções de applet jnlp de javascript? Porque este não me dá nada.

Foi útil?

Solução

Eu consegui há muito tempo, mas esqueci de responder minha própria pergunta. Então aqui está:

Vamos supor que você defina seu applet assim:

<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>

Você pode obter um JavaScript! manuseie o applet assim:

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

Agora, qualquer que seja o método que você tenha no seu applet, ele é melhor retornar a string ou um valor primitivo, mas mesmo que não onda, você pode operar, supondo que você conhece seus métodos. Continuando meu exemplo de cima, se no seu applet você tiver uma função definida assim:

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

Então você pode chamá -lo com seu JavaScript como este:

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

E parabéns, você chamou um método Java Applet da JavaScript que foi implantado pela JWS.

Há outra maneira de fazer isso, mas funcionaria apenas no Firefox, então é melhor usar este. As regras de LiveConnect ainda se aplicam, mesmo que a tecnologia esteja preterida.

Outras dicas

Entendo que os applets lançados usando o JNLP não estão mais acessíveis ao JS, mas posso estar errado. Para investigar ainda mais, eu recomendaria remover o implantingjava.js e codificar o elemento de applet.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top