Вопрос по javascript, java – Как вызвать метод апплета из JavaScript

2

Я создал апплет, и я собираюсь получить доступ к методу апплета из моей html-страницы веб-проекта.

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

<code>public class MessageApplet extends Applet {
private Label m_mess;    
    public void init() 
    {
        setBackground(Color.lightGray);
        setLayout(new BorderLayout());
        m_mess = new Label("MessageApplet is Running... : No Selection Yet", Label.CENTER);
        add(BorderLayout.CENTER, m_mess);
    }    
    public void setMessage(String message)
    {
        m_mess.setText("Selection : " + message);
    } 
} 
</code>

И моя HTML-страница выглядит так:

<code><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
<SCRIPT LANGUAGE="JavaScript">
function selectedCity() 
{
    if(document.CityChoice.City[0].checked == true)
      {
        document.SimpleMessageApplet.setMessage(document.CityChoice.City[0].value);
    }      
}
</SCRIPT></HEAD>
<BODY >
<b>This is the Applet</b>
<APPLET CODE="MessageApplet.class" NAME="SimpleMessageApplet" WIDTH=350 HEIGHT=100 >
</APPLET >
<FORM NAME="CityChoice">
<input type="radio" name="City" value="Boston" onClick="selectedCity()"> Boston<br>
</form>
</BODY > 
</html>
</code>

но когда я нажимаю переключатель, мой браузер зависает, и я не могу получить доступ к методу апплета. Мой класс апплета находится в каталоге по умолчанию, а html - в папке WebContent. Пожалуйста, скажите мне, что я должен изменить в своем коде?

такое CityChoice.City [0] .value строка? Perry Monschau
@PerryMonschau, когда я запускаю его в IE, а не в Mozilla, на консоли java выдается сообщение об ошибке: load: class MessageApplet.class not found. java.lang.ClassNotFoundException: MessageApplet.class в sun.plugin2.applet.Applet2ClassLoader.findClass (неизвестный источник) в sun.plugin2.applet.Plugin2ClassLoader.loadClass0 (неизвестный источник) в sun.plugin2.applet.Pluader SourceloadClass ) в sun.plugin2.applet.Plugin2ClassLoader.loadClass (неизвестный источник) в java.lang.ClassLoader.loadClass (неизвестный источник) Pravin
хм ... попробуйте поставить & quot; / & quot; перед MessageApplet.class. Просто воткну в темноту, но это то, что я всегда делаю первым, когда появляются такие странные вещи, как эта. Perry Monschau
@PerryMonschau да Pravin
@PerryMonschau Нет, извините, я вставил & quot; / & quot; перед MessageApplet.class, но все еще та же проблема ... Pravin

Ваш Ответ

2   ответа
2

Проблема, которую вы получаете в разных браузерах, заключается в том, что они имеют разные реализации устаревшей технологии LiveConnect (javascript & lt; -> gava).

Как правило, Firefox будет более охотно сотрудничать при попытках делать такие вещи.

Ваша проблема в том, что вы пытаетесь включить свой апплет на страницу очень древним способом. Хотя это может работать и будет работать в некоторых браузерах, это не рекомендуемый способ добавления апплета на страницу.

Java Web start - это технологический стек, а JNLP - это протокол, который вы можете использовать для стандартного распространения контента Java, как вы можете прочитать в этой статье:

http://en.wikipedia.org/wiki/Java_Web_Start

Дескриптор jnlp развертывания - это правильный способ, которым вы можете использовать для встраивания вашего апплета на страницу. Также хорошей идеей является использование сценария Sun Sun deployJava.js, который избавит вас от многих проблем при развертывании вашего апплета в контейнере на странице. (он немного ограничен, так что не стесняйтесь добавлять к нему материал)

http://docs.oracle.com/javase/6/docs/technotes/guides/jweb/deployment_advice.html

В целом, апплет для запуска через веб-интерфейс jnlp / Java - это путь. Ниже приведен пример дескриптора развертывания.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <jnlp codebase="file:/C:/JavaApplication6/dist/" href="launch.jnlp" spec="1.0+">
        <information>
            <title>JavaApplication6</title>
            <description>blalbla</description>
            <description kind="short">JavaApplication6</description>

        </information>
    <update check="background"/>
    <security>
    <all-permissions/>
    </security>
        <resources>
    <j2se java-vm-args="-Djava.security.policy=applet.policy" version="1.5+"/>
    <jar href="JavaApplication6.jar" main="true"/>


        <jar href="lib/jna.jar"/>
    <jar href="lib/platform.jar"/>
    </resources>
        <applet-desc height="300" main-class="winToJnaApi.NewApplet" name="JavaApplication6" width="300">

        </applet-desc>
    </jnlp>
@ DaTroop np. Рад, что смог помочь. @Balasaheb В сети много примеров, но я посмотрю, что я могу сделать. :)
Баба, я добавил код по ошибке в твоем ответе. пожалуйста, удалите это. Извинения ...
Большое спасибо!
@baba Я прочитал о JNLP сверху ссылки, но я не понимаю, как его использовать? не могли бы вы дать мне простой & quot; Hello World & quot; программа с файлом JNLP, который я пойму Pravin
@DaTroop, ваша правка отклонена.
3

Проблема в проверке оператора IF:

document.CityChoice.City[0].checked == true

Это не совсем так, как в случае с Javascript, поскольку неправильное выражение, которое у вас там, выдает ошибку, и оно никогда не попадает в тело оператора IF.

Я удалил оператор IF и изменил код на что-то вроде этого:

function selectedCity() 
{
    document.SimpleMessageApplet.setMessage("Hello");                
}

Когда я нажимаю, я вижу сообщение Hello.

Измените содержимое файла HTML на что-то вроде:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Insert title here</title>
        <SCRIPT LANGUAGE="JavaScript">
            function selectedCity() 
            {
                var elem = document.getElementById('cityRb');

                if(elem.checked)
                {
                    document.SimpleMessageApplet.setMessage(elem.value);
                }      
            }
        </SCRIPT></HEAD>
    <BODY >
        <b>This is the Applet</b>
    <APPLET CODE="MessageApplet.class" NAME="SimpleMessageApplet" WIDTH=350 HEIGHT=100 >
    </APPLET >
    <FORM NAME="CityChoice">
        <input type="radio" id="cityRb" name="City" value="Boston" onClick="selectedCity()"> Boston<br>
    </form>
</BODY > 
</html>

Также добавляем полный код класса:

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Label;

/**
 *
 * @author hmmmmm
 */
public class MessageApplet extends Applet {

    private Label m_mess;

    public void init() {
        setBackground(Color.lightGray);
        setLayout(new BorderLayout());
        m_mess = new Label("MessageApplet is Running... : No Selection Yet", Label.CENTER);
        add(BorderLayout.CENTER, m_mess);
        m_mess.setBackground(Color.red);
    }

    public void setMessage(String message) {
        m_mess.setText("Selection : " + message);
    }
}
спасибо, это работает, но я хочу запустить его на стороне сервера, поэтому я создаю jar-файл, содержащий класс Java и html, который вы отправили в одно и то же место, и я хочу перенаправить его на этот html из моего файла index.html, но он не может найти во время выполнения. Я поместил этот файл jar в classpath проекта. Как я могу это сделать? Pravin
Теперь я создаю пакет "myPackage" под которым я поместил MessageApplet.java и index.html, но при запуске выдает ошибку 404: Запрошенный ресурс (/ SignAppletTest /) недоступен. Pravin
Это еще одна проблема. Если класс апплета содержится в пакете, то также добавьте пакет mypackage.MessageApplet.class перед именем класса апплета. Я бы предложил на данный момент переместить класс в пакет по умолчанию, скомпилировать его и поместить файл html в тот же каталог.
Пожалуйста, используйте HTML и Java класс, который я вам отправил. Создайте проект и поместите оба файла в каталог src вашего проекта. Откройте bin / index.html в браузере. Они отлично работают. Ваши каталоги src и bin могут иметь разные имена. Я не знаю, какую IDE вы используете или настройки вашего проекта.
Я заменил свой код на вышеупомянутый, но мой IE зависает, когда я нажимаю на флажок, и в верхней части страницы он показывает окно ошибок, когда я нажимаю на это, он открывает консоль Java, которая показывает: MessageApplet.class not found. java.lang.ClassNotFoundException: MessageApplet.class в sun.plugin2.applet.Applet2ClassLoader.findClass (неизвестный источник) в sun.plugin2.applet.Plugin2ClassLoader.loadClass0 (неизвестный источник) в sun.plugin2.applet.Pluader SourceloadClass ) в sun.plugin2.applet.Plugin2ClassLoader.loadClass (неизвестный источник) в java.lang.ClassLoader.loadClass (неизвестный источник) Pravin

Похожие вопросы