如何从javascript调用Applet方法

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

这里我的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页面看起来像:

  Insert title here  function selectedCity() { if(document.CityChoice.City[0].checked == true) { document.SimpleMessageApplet.setMessage(document.CityChoice.City[0].value); } }   This is the Applet   
Boston

但是当我单击单选按钮时,我的浏览器会挂起,我无法访问applet方法。 我的applet类在默认目录中,html在WebContent文件夹中。 请告诉我我的代码应该有什么变化?

问题是IF语句检查:

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

这并不是它与Javascript的关系,因为你在那里的错误表达式抛出一个错误,它永远不会进入IF语句体。

我删除了IF语句并将代码更改为以下内容:

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

当我点击时,我看到Hello消息很好。

将您的HTML文件内容更改为:

  Insert title here   This is the Applet   
Boston

还添加完整的类代码:

 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在尝试做这些事情时会更加合作。

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

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 start powered applet是最佳选择.Below是部署描述符的一个示例。

    JavaApplication6 blalbla JavaApplication6