2012-05-11 3 views
2

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

Вот мой апплет выглядит следующим образом:

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

И моя 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() 
{ 
    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> 

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

+0

is CityChoice.City [0] .value a String? –

+0

@PerryMonschau да – Pravin

+0

@PerryMonschau, когда я запускаю его на IE, а не Mozilla, он показал ошибку на консоли java, например: load: class MessageApplet.class не найден. java.lang.ClassNotFoundException: MessageApplet.class \t в sun.plugin2.applet.Applet2ClassLoader.findClass (Unknown Source) \t в sun.plugin2.applet.Plugin2ClassLoader.loadClass0 (Unknown Source) \t в sun.plugin2.applet .Plugin2ClassLoader.loadClass (Unknown Source) \t на sun.plugin2.applet.Plugin2ClassLoader.loadClass (Unknown Source) \t на java.lang.ClassLoader.loadClass (Unknown Source) – Pravin

ответ

3

Проблема заключается в IF проверке заявления:

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

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

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

function selectedCity() 
{ 
    document.SimpleMessageApplet.setMessage("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); 
    } 
} 
+0

Я заменил мой код выше, но мой IE зависает, когда я нажимаю на флажок, а наверху страницы, на которой он показывает Ящик ошибки, когда я нажимаю на него, открывает консоль java, которая показывает: MessageApplet.class не найден. java.lang.ClassNotFoundException: MessageApplet.class на sun.plugin2.applet.Applet2ClassLoader.findClass (Неизвестный источник) на sun.plugin2.applet.Plugin2ClassLoader.loadClass0 (Неизвестный источник) на sun.plugin2.applet.Plugin2ClassLoader.loadClass (Неизвестный источник) на sun.plugin2.applet.Plugin2ClassLoader.loadClass (Неизвестный источник) в java.lang.ClassLoader.loadClass (Неизвестный источник) – Pravin

+0

Это еще одна проблема. Если класс апплета содержится в пакете, то также добавьте пакет mypackage.MessageApplet.class перед именем класса апплета. Я бы предложил теперь переместить класс в пакет по умолчанию, скомпилировать его и иметь html-файл в том же каталоге. – DaTroop

+0

Теперь я создаю пакет «myPackage», под которым я разместил MessageApplet.java и index.html, но когда я запустил, он показывает ошибку 404: Запрошенный ресурс (/ SignAppletTest /) недоступен. – Pravin

2

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

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

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

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

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

Развертывание JNLP дескриптором является подходящий способ, который вы можете использовать для вставки вашего апплета на страницу. Кроме того, рекомендуется использовать скрипт deployJava.js от Sun, который сэкономит вам массу проблем при развертывании апплета в контейнер на странице. (Это немного ограничено, хотя так не стесняйтесь добавлять материал к нему)

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

Все в общем, JNLP/Java Web Start апплет питание является способ go.Below пример дескриптора развертывания ,

<?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> 
+0

baba Я добавил код по ошибке в ваш ответ. пожалуйста, удалите его. извинения ... – DaTroop

+0

@DaTroop, ваше изменение было отклонено. – stema

+0

@baba Я читал о JNLP сверху ссылок, но я смущен, как его использовать? не могли бы вы дать мне простую программу «Hello World» с файлом JNLP, который я пойму? – Pravin

Смежные вопросы