2012-05-11 4 views
2

私はアプレットを作成しましたが、Webプロジェクトの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> 

が、私はラジオボタンをクリックしたときに、私のブラウザがハングアップを取得し、私が今までアプレットのメソッドにアクセスすることはできません。 私のアプレットクラスはデフォルトディレクトリにあり、htmlはWebContentフォルダにあります。 私のコードに変更が必要な場合は教えてください。

+0

はCityChoice.City [0] .value a Stringですか? –

+0

@PerryMonschauはい – Pravin

+0

@ PerryMonschau MozillaではなくIE上で実行すると、Javaコンソールにエラーが表示されます。load:class MessageApplet.class not found。 にjava.lang.ClassNotFoundException:MessageApplet.class sun.plugin2.applet.Applet2ClassLoader.findClass(不明なソース)sun.plugin2.applet.Plugin2ClassLoader.loadClass0で \t(不明なソース)で \t sun.plugin2.appletで \t .Plugin2ClassLoader.loadClass(不明なソース)sun.plugin2.applet.Plugin2ClassLoader.loadClassで \t(不明なソース)java.lang.ClassLoader.loadClass(不明なソース) – Pravin

答えて

3

問題は、IF文のチェックです:

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

これはあなたが持っている間違った表現はエラーがスローされますと、それはIF文の本体にそれを作ることはありませんので、それはJavaScriptを使用して行く正確にどのようにではありません。

私は、IF文を削除し、このような何かにコードを変更:私はHelloメッセージの罰金を見るクリックすると

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:sun.plugin2.applet.Applugin2ClassLoader.findClassのMessageApplet.class(不明なソース)at sun.plugin2.applet.Plugin2ClassLoader.loadClass0(不明なソース)at sun.plugin2.applet.Plugin2ClassLoader.loadClass(不明なソース)at sun.plugin2.applet.Plugin2ClassLoader.loadClass(不明なソース)java.lang.ClassLoader.loadClass(不明なソース) – Pravin

+0

これは別の問題です。アプレットクラスがパッケージに含まれている場合は、アプレットクラス名の前にmypackage.MessageApplet.classパッケージも追加します。クラスをデフォルトのパッケージに移動し、コンパイルして、同じディレクトリにhtmlファイルを置くことをお勧めします。 – DaTroop

+0

私はMessageApplet.javaとindex.htmlを配置したパッケージ "myPackage"を作成しますが、実行すると404エラーが表示されます:要求されたリソース(/ SignAppletTest /)が利用できません。 – Pravin

2

が、彼らは別の実装を持っているということです旧式のLiveConnect(javascript < - > java)テクノロジ

Firefoxはこのようなことをしようとすると、より協力的になります。

あなたの問題は、非常に古い方法でページにアプレットを含めることを試みていることです。一部のブラウザでは動作するかもしれませんが、ページにアプレットを含めることはお勧めできません。

のJava WebスタートハイテクスタックであるとJNLPはあなたがこの記事で読むことができるよう、あなたが標準化された方法でJavaコンテンツを配信するために使用できるプロトコルです。

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

展開JNLP記述子があります適切な方法で、アプレットをページに埋め込むことができます。また、SunのdeployJava.jsスクリプトを使用することをお勧めします。このスクリプトは、ページ上のコンテナにアプレットをデプロイする際に多くの問題を軽減します。すべてのすべてで

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

を、JNLP/Javaのウェブはパワードアプレットを起動し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

ババあなたの答えに誤ってコードを追加しました。それを取り除いてください。お詫び... – DaTroop

+0

@DaTroop、編集が拒否されました。 – stema

+0

@baba上記のリンクからJNLPについて読みましたが、使い方が分かりません。 JNLPファイルでわかりやすい "Hello World"プログラムを教えてください。 – Pravin

関連する問題