2

アプレットを作成しました。Web プロジェクトの HTML ページからアプレット メソッドにアクセスします。

ここで私のアプレットは次のようになります。

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 フォルダにあります。コードで何を変更する必要がありますか?

4

2 に答える 2

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);
    }
}
于 2012-05-11T10:01:29.030 に答える
2

異なるブラウザで発生する問題は、古いLiveConnect(JavaScript <-> Java)テクノロジの実装が異なることです。

経験則として、Firefoxはそのようなことをしようとするときにもっと協力的になります。

問題は、非常に古い方法でアプレットをページに含めようとしていることです。一部のブラウザでは機能する可能性がありますが、ページにアプレットを含めることはお勧めしません。

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

JavaWebスタート

デプロイメントJNLP記述子は、アプレットをページに埋め込むために使用できる適切な方法です。また、SunのdeployJava.jsスクリプトを使用することをお勧めします。これにより、アプレットをページ上のコンテナにデプロイする際の多くの問題を回避できます(少し制限がありますが、自由に追加してください)。

Java™リッチインターネットアプリケーションの導入に関するアドバイス

全体として、JNLP /JavaWebスタートを利用したアプレットが最適です。以下は、デプロイメント記述子の例です。

<?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>
于 2012-05-11T10:24:53.567 に答える