Javascript til Java-kommunikation ved hjælp af LiveConnect fungerer ikke

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har arbejdet på et projekt, der kræver kommunikation begge veje mellem Java og JavaScript. Jeg har lykkedes at få det til at fungere under alle browsere i OS X, men jeg står nu over for udfordringen om at få den til at køre på Windows under enhver browser. I øjeblikket virker det simpelthen ikke.


Jeg undrer mig bare om, om der er noget særligt, jeg skal gøre for at JavaScript kan kommunikere med Java?


Min appletkode ser sådan ud:


<applet id='theApplet' 
    code="com/company/MyApplet.class" 
    archive="SMyApplet.jar" 
    height="50" width="900" 
    mayscript="true" scriptable="yes">
        Your browser is ignoring the applet tag.
</applet>


Når appleten er indlæst, forsøger jeg at kalde funktioner på den som sådan:


 alert("Call some java:" + theApplet.testFunc());


Og i firebug-konsollen får jeg følgende fejl:


theApplet.testFunc is not a function


Jeg kan bekræfte, at dette ikke virker i IE heller.


Når siden indlæses, har jeg java-konsollen åben, og jeg kan se, at appleten er i færd med at indlæse og klar til at acceptere opkald.


Enhver hjælp ville blive meget værdsat!


Skål





Opdatering: Her er den fjernede java kode, der udsætter den offentlige api, som jeg forsøger at ringe til.


package com.company;

import com.google.gson.Gson;

import java.applet.*;
import java.io.*;
import java.net.*;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.*;

import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.*;

import netscape.javascript.*;

public class MyApplet extends Applet implements Runnable
{
    public void init() 
    {
        JSON = new Gson();
        isReadyVar = 0;
        workThread = null;
    }

    public void start()
    {
    }

    public void run()
    {
        System.out.println("Done");             
    }


    public void stop()
    {
    }

    public void destroy()
    {
    }

    /* Public API */

    public int testFunc()
    {
        return 200;
    }
}





Opdater [[SOLVED]]:


Jeg regnede med, hvad problemet var nøjagtigt. Viser, at Gson lib, jeg brugte, ikke var underskrevet, men min egen krukke var. Browsere på windows kræver, at alle libs er underskrevet, så jeg pakkede Gson ind med mine javafiler og underskrev partiet, og det løste problemet! Tak for alles hjælp!

Bedste reference


Jeg regnede med, hvad problemet var nøjagtigt. Viser, at Gson lib, jeg brugte, ikke var underskrevet, men min egen krukke var. Browsere på windows kræver, at alle libs er underskrevet, så jeg pakkede Gson ind med mine javafiler og underskrev partiet, og det løste problemet! Tak for alles hjælp!

Andre referencer 1


alert("Call some java:" + document.getElementbyId("theApplet").testFunc());


Sørg for, at testFunc() -metoden er angivet som public adgang.


Hvis det ikke virker, skal du skrive appletkoden som en SSCCE. [14]


BTW


Forkert


code="com/company/MyApplet.class" 


Korrekt


code="com.company.MyApplet" 


BTW 2


Forkert


..scriptable="yes">


Korrekt


..scriptable="true">

Andre referencer 2


Da elementet applet er udskrevet, bruger jeg følgende kode, som i hvert fald fungerer i Firefox:


<object id="MyApplet" classid="java:com.example.myapplet"
  codetype="application/java" codebase="bin/" height="10" width="10"
</object>