如何从javascript

时间:2018-04-01 17:46:46

标签: javascript java applet java-web-start

我是一个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代码?

1 个答案:

答案 0 :(得分:0)

<applet>标记已经存在obsolete好几年了,在任何最近版本的Firefox中都没有任何作用。所以这里最简单的答案是,如果你真的使用的是firefox(你说你正在使用firefox用户代理,那么不清楚你是否意味着你正在使用firefox,或者你已经改变了useragent字符串来声称你的非-firefox浏览器是firefox),applet永远不会被加载,所以你的JS试图调用一些不存在的东西作为一个函数,并且这样做不会起作用。

至少,您想尝试使用<object>加载代码(然后您需要安装applet执行插件,FF / Chrome不再自己执行java),但是更好的建议是根本不使用Java,因为现代JS已经避免了Java集成到页面中的需要。