我是一个applet&#34; edu.MGT.MainApplet&#34;在jar&#34; MGT2-0.0.1.jar&#34;中实现。本地html页面使用标记<applet>
来调用此类的方法。一段时间以前一切正常。
(详细说明:applet提供了一组分析和转换数学表达式的方法。数学表达式存储为数据树,方法集允许应用它们通常的数学运算,查找子表达式,执行微积分,...。applet的API非常简单:方法有一个名称和简单的参数,通常只有一个整数或一个字符串,并返回一个字符串。带有数学表达式的树永远不会被转移,它们会保留在applet中。 html / javascript GUI包含执行方法的按钮,并使用MathJax将字符串结果转换为图形数学表达式。
相关的javascript行是:
> <applet id="mgt"
> archive="MGT2-0.0.1.jar" style="width: 1px; height: 1px; float: left;"
> code="edu.MGT.MainApplet">
> </applet>
>
> <script>
> var TeX = mgt.predefined(1);
> ...
其中&#34; mgt.predefined(1)&#34;是一个调用Java类的一个方法的例子,它是applet。
现在,使用navigator firefox 57.0,控制台显示错误:
TypeError:mgt.predefined不是函数[了解更多] gtexpression1.html:90:15
我检查过jar的内容。类存在且方法存在:
$ jar -xvf MGT2-0.0.1.jar
...
inflated: edu/MGT/MainApplet.class
...
并且该类具有相关方法:
$ javap edu/MGT/MainApplet.class
Compiled from "MainApplet.java"
public class edu.MGT.MainApplet extends java.applet.Applet {
...
public java.lang.String predefined(int);
经过数小时的谷歌搜索和尝试......
尝试编号1:
使用<object>
代替<applet>
:结果无变化。
尝试编号2:
转到Java Web Start。我写了以下MGT2.jnlp文件:
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="" href="">
<information>
<title>MGT</title>
<vendor>private</vendor>
</information>
<resources>
<j2se version="1.7+"
href="http://java.sun.com/products/autodl/j2se" />
<jar href="MGT2-0.0.1.jar" main="true" />
</resources>
<applet-desc main-class="edu.MGT.MainApplet"
name="MGT"
width="1" height="1">
</applet-desc>
<update check="background"/>
</jnlp>
并将javascript部分更改为:
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var attributes = {
code: "edu.MGT.MainApplet",
id: "MGT",
width:1, height:1} ;
var parameters = {jnlp_href: 'MGT2.jnlp'} ;
deployJava.runApplet(attributes, parameters, '1.7');
但出现以下错误:
ReferenceError:没有定义mgt [了解更多] gtexpression1.html:103:9
尝试编号3:
与以前相同的jnlp文件,javascript代码中的另一行:
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var attributes = {
code: "edu.MGT.MainApplet",
id: "mgt",
width:1, height:1} ;
var parameters = {jnlp_href: 'MGT2.jnlp'} ;
deployJava.runApplet(attributes, parameters, '1.7');
var mgt = document.getElementById("MGT");
,错误是:
TypeError:mgt为null [了解详情] gtexpression1.html:103:9
如今,如何从www页面调用Java代码?
答案 0 :(得分:0)
<applet>
标记已经存在obsolete好几年了,在任何最近版本的Firefox中都没有任何作用。所以这里最简单的答案是,如果你真的使用的是firefox(你说你正在使用firefox用户代理,那么不清楚你是否意味着你正在使用firefox,或者你已经改变了useragent字符串来声称你的非-firefox浏览器是firefox),applet永远不会被加载,所以你的JS试图调用一些不存在的东西作为一个函数,并且这样做不会起作用。
至少,您想尝试使用<object>
加载代码(然后您需要安装applet执行插件,FF / Chrome不再自己执行java),但是更好的建议是根本不使用Java,因为现代JS已经避免了Java集成到页面中的需要。