Связь Javascript с Java с использованием LiveConnect не работает - PullRequest
2 голосов
/ 11 апреля 2011

Я работал над проектом, который требует связи в обоих направлениях между Java и JavaScript. Мне успешно удалось заставить его работать под всеми браузерами в OS X, но теперь я столкнулся с проблемой заставить это работать под Windows под любым браузером. На данный момент это просто не работает.

Мне просто интересно, есть ли что-то особенное, что мне нужно сделать, чтобы JavaScript взаимодействовал с Java?

Код моего апплета выглядит так:

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

После загрузки апплета я пытаюсь вызвать на нем такие функции:

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

И в консоли firebug я получаю следующую ошибку:

theApplet.testFunc is not a function

Я могу подтвердить, что в IE это тоже не работает.

Когда страница загружается, у меня открыта консоль Java, и я вижу, что апплет успешно загружается и готов к приему вызовов.

Любая помощь будет принята с благодарностью!

Приветствия


Обновление: вот урезанный Java-код, отображающий общедоступный API, который я пытаюсь вызвать.

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

Обновление [решено]:

Я понял, в чем проблема. Оказывается, что библиотека Gson, которую я использовал, не была подписана; но моя собственная банка была Браузеры на окнах требуют, чтобы все библиотеки были подписаны; поэтому я упаковал Gson с моими java-файлами и подписал лот, и это решило проблему! Спасибо всем за помощь!

Ответы [ 3 ]

1 голос
/ 13 апреля 2011

Я разобрался, в чем именно проблема. Оказывается, что библиотека Gson, которую я использовал, не была подписана; но моя собственная банка была Браузеры на окнах требуют, чтобы все библиотеки были подписаны; поэтому я упаковал Gson с моими java файлами и подписал лот, и это решило проблему! Спасибо всем за помощь!

0 голосов
/ 11 апреля 2011

Поскольку элемент applet устарел, я использую следующий код, который работает по крайней мере в Firefox:

<object id="MyApplet" classid="java:com.example.myapplet"
  codetype="application/java" codebase="bin/" height="10" width="10"
</object>
0 голосов
/ 11 апреля 2011
alert("Call some java:" + document.getElementbyId("theApplet").testFunc());

Убедитесь, что метод testFunc() объявлен как public access.

Если это не работает, отправьте код апплета как SSCCE .

BTW

Неправильно

code="com/company/MyApplet.class" 

Правильно

code="com.company.MyApplet" 

КСТАТИ 2

Неправильно

..scriptable="yes">

Правильно

..scriptable="true">
...