【问题标题】:How to call a method declared in an applet from JavaScript如何从 JavaScript 调用在小程序中声明的方法
【发布时间】:2012-12-10 14:49:25
【问题描述】:

我正在尝试制作一个基本的Java applet 来为他们打开客户计算机上的文件。我想通过JavaScript调用下面Java小程序中的openFile函数。

import java.awt.Desktop;
import java.io.File;
import java.io.IOException;

import javax.swing.JApplet;

public class Test extends JApplet {
    public void openFile(String filePath) {
        File f = new File(filePath);

        try {
            Desktop.getDesktop().open(f);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在我网页的正文标签之间,我有以下内容:

<applet code="Test.class" height="0" width="0"></applet>

<script type="text/javascript">
    document.applets[0].openFile("C:\\test.log");
</script>

当我加载页面时出现错误:

TypeError: Object # has no method 'openFile'

我需要做些什么来修复此错误并让小程序正常工作?

【问题讨论】:

  • 小程序将成为版本控制系统中的一个组件。当他们“签出”代码时,一个单独的 Web 服务将文件复制到客户端计算机,但我想同时在他们的默认文本编辑器中自动打开它。如果您能想到一种更简单的方法来打开文本文件,我很乐意。

标签: java javascript applet


【解决方案1】:

用途:

<script src=
  "http://www.java.com/js/deployJava.js"></script>

<script>
    <!-- The applet id can be used to get a reference to
    the applet object -->
    var attributes = { id:'mathApplet',
        code:'jstojava.MathApplet',  width:1, height:1};
    var parameters = {jnlp_href: 'math-applet.jnlp'};
    deployJava.runApplet(attributes, parameters, '1.6');
</script>

参考:Invoking Applet Methods From JavaScript

JavaScript 可以直接调用小程序的公共方法或公共变量。 JavaScript 将嵌入式小程序视为一个对象。通过为小程序提供一个 ID,JavaScript 可以通过以下方式访问它:

    document.Applet_ID.Applet_Method()

你可以用这个,

文件 MyApplet.html

<html>
<head>
    <script language="Javascript">
        function accessAppletMethod()
        {
            document.getElementById("AppletABC").appendText("Applet Method");
        }
    </script>

    <title>Testing</title>
</head>

<body onload="accessAppletMethod()">

    <h1>Javascript acess Applet method</h1>

    <applet width=300 height=100 id="AppletABC"
        code="JavaScriptToJava.class">
    </applet>
</body>

</html>

文件 JavaScriptToJava.java

import java.applet.Applet;
import java.awt.FlowLayout;
import java.awt.TextArea;

public class JavaScriptToJava extends Applet{

    TextArea textBox;

    public void init(){
        setLayout(new FlowLayout());
        textBox = new TextArea(5, 40);
        add(textBox);
    }

    public void appendText(String text){
        textBox.append(text);
    }
}

【讨论】:

  • 你什么时候可以做document.Applet_ID
  • @Ian,我相信,现在你会对我的更新感到满意吗??还是我还需要改进??
  • @Daniel 你确定,你得到了那个错误??您的.class 文件在正确的位置??请检查
  • 你不能使用document.AppletABC,我不确定你是从哪里得到的。您可以在设置元素的name 时执行此操作,而不是使用ids。 document.getElementById("AppletABC") 是你应该怎么做的。另外,我认为您不能将&lt;script&gt; 放在&lt;head&gt; 元素旁边...您必须将其放在&lt;head&gt;&lt;body&gt; 中。
  • 我认为问题是我没有初始化函数,所以小程序没有正确启动。谢谢。
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
相关资源
最近更新 更多