如何从 JavaScript 调用小程序方法
How to call an applet method from JavaScript
我已经创建了一个小程序,我将从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 文件夹中。我应该在代码中更改什么?
问题是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);
}
}
你得到的问题是在不同的浏览器上,它们有不同的过时的LiveConnect(JavaScript <-> Java(技术的实现。
根据经验,Firefox在尝试做这些事情时会更加合作。
您的问题是您正在尝试以非常古老的方式将小程序包含在页面上。尽管它可能并且将在某些浏览器上运行,但不建议将小程序包含在页面中。
JavaWeb start 是技术堆栈,JNLP 是可用于以标准化方式分发 Java 内容的协议,如本文所示:
Java Web start
部署 JNLP 描述符是将小程序嵌入页面的正确方法。此外,使用 Sun 的 deployJava.js 脚本是个好主意,这将在将小程序部署到页面上的容器时为您省去很多麻烦(虽然它有点限制,所以请随意添加内容(。
Java™ 富互联网应用程序部署建议
总而言之,JNLP/Java Web 启动驱动的小程序是要走的路。下面是部署描述符的示例。
<?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>
相关文章:
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何让应用程序帮助程序方法在发送的请求为 JS 格式时工作
- 如何在grails中链接javascript引导程序方法
- 如果类有多个事件处理程序方法,如何防止多个事件执行
- 通过 JavaScript 调用小程序方法将不起作用
- 从 JavaScript 调用的小程序方法中的 return 语句
- 如何从 JavaScript 调用小程序方法
- 帮助程序方法、ActionView 和 ActionController
- 如何将帮助程序方法的输出用作 HAML 哈希中的值
- Meteor.js:如何从事件调用帮助程序方法
- 从JavaScript调用JAVA小程序方法,IE / FF对象/嵌入问题
- jQuery 事件处理程序方法 - 混合对
- 为什么不是't正在调用AngularJS表单处理程序方法
- 查询选择方法-.ready()与实用程序方法$.ready()
- 在尝试管理和访问不同组件和处理程序方法中的状态时,我可以使用RxJS与Redux/context吗
- 定义可能需要在AngularJS中修改$scope数据的实用程序/帮助程序方法的理想方式是什么
- 有没有一种程序方法可以找到javascript代码片段;显示:无”;到元素
- jQuery.post()没有触发成功处理程序方法
- window.onload从事件处理程序方法返回后调用
- 使用parseDate实用程序方法分析月份文本