繁体   English   中英

如何从JavaScript调用Applet方法

[英]How to call Applet method from javascript

我已经创建了一个Applet,我将从Web项目上的html页面访问applet方法。

这里我的小程序看起来像:

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方法。 我的applet类位于默认目录中,而html位于WebContent文件夹中。 请告诉我我的代码应该更改什么?

问题是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);
    }
}

您在不同的浏览器上遇到的问题是,它们具有过时的LiveConnect(javascript <-> java)技术的不同实现。

根据经验,Firefox在尝试执行此类操作时会更加合作。

您的问题是您试图以一种非常古老的方式将小程序包含到页面中。 尽管它可能并且将在某些浏览器上运行,但是建议不要在页面中包含小程序。

Java Web start是技术堆栈,JNLP是可用于以标准化方式分发Java内容的协议,您可以在本文中阅读:

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

部署jnlp描述符是将applet嵌入页面的正确方法。 同样,使用Sun的deployJava.js脚本也是一个好主意,它将在将Applet部署到页面上的容器时为您省去很多麻烦。 (虽然有点受限制,所以可以随意添加内容)

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

总而言之,采用jnlp / Java Web启动技术的applet是必经之路。下面是部署描述符的示例。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM