Can';t从JavaScript调用JNLP部署的小程序代码
这是我关于Java的第一个问题,请耐心听我说 我根据以下代码构建了一个简单的小程序类HelloWorldApp.class:Can';t从JavaScript调用JNLP部署的小程序代码,java,javascript,applet,jnlp,Java,Javascript,Applet,Jnlp,这是我关于Java的第一个问题,请耐心听我说 我根据以下代码构建了一个简单的小程序类HelloWorldApp.class: import java.applet.Applet; class HelloWorldApp extends Applet { static final long serialVersionUID = 6636669702238171717L; public String test() { return "Hello World!
import java.applet.Applet;
class HelloWorldApp extends Applet
{
static final long serialVersionUID = 6636669702238171717L;
public String test()
{
return "Hello World!"; // Display the string.
}
}
然后,我从这个类文件构建了一个jar文件。之后,我制作了一个愚蠢的简单JNLP文件:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="/Content/applets" href="/Content/applets/datadelivery.jnlp">
<information>
<title>Hello World</title>
<vendor>Me</vendor>
</information>
<resources>
<!-- Application Resources -->
<j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="HelloWorldApp.jar" main="true" />
</resources>
<applet-desc
name="Test Applet"
main-class="HelloWorldApp"
width="300"
height="50">
</applet-desc>
<update check="background"/>
</jnlp>
问题出在哪里?没有函数调用;JS控制台回应说“uncaughttypeerror:Object”没有方法“test”。所以在这条线路的某个地方,部署没有成功。但是在哪里呢?基于示例,JNLP的东西看起来是正确的。为了简化处理,我建议您使用“不推荐使用的”applet标记测试applet。我记得我在javascript小程序加载器上遇到了奇怪的问题,无法理解为什么它不能按预期的方式工作。
alert(deliveryApplet.test())
是访问页面中元素的一种非常简单的方法。我建议您编写一个JS函数
,它接受ID字符串并返回相应的元素。在一系列浏览器中彻底测试它。在小程序中,调用(已测试且健壮的)JS函数。另外,确保小程序调用声明scriptable=true
。将jnlp_ref更改为jnlp文件的相对路径(即无路径)。因为小程序中没有绘画,所以很难看到它是否启动。如果未能启动,则会收到红色的X和小程序未启动消息。在更改jnlp文件和重新运行之间清除java缓存。您正在加载deployJava.js脚本?@Petesh:是的,deployJava.js肯定正在加载。我将jnlp_href更改为“datadelivery.jnlp”,擦除Java缓存(Java控制面板->临时Internet文件->设置…,正确吗?),然后重试。同样的问题。但你是对的,我至少在发射。我花了一些时间从红色的X到我现在所在的灰色未上漆的盒子!嗯-我基本上构建了这个-它工作得很好,包括从Safari手动调用alert(deliveryApplet.test())
。不过,我不得不对firefox使用警报(document.applets[0].test())
@Petesh更新:抱歉,我花了一段时间才回复。总之,我注意到了两件事:1)我没有为IIS中的.jnlp文件设置MIME类型,这会给事情带来麻烦。固定的。2) 我花时间在我的应用程序中采用了github示例——paint()和all,瞧!我发现小程序根本没有加载。我觉得我在某个地方得到了一个错误的路径……如果HTML文件在~/administration中,applet/JNLP在~/Content/applets中,那么除了JNLP中的两个路径之外,还有什么变化?
<script type="text/javascript">
var attributes = {
id:'deliveryApplet',
code: 'HelloWorldApp',
// note: I tried including "codebase: '/Content/applets'", but nothing new happened
width: 300,
height: 50
};
var parameters = {
jnlp_href: '/Content/applets/datadelivery.jnlp'
};
deployJava.runApplet(attributes, parameters, '1.6');
</script>
alert(deliveryApplet.test())