当前位置: 首页 > 面试题库 >

Javascript与Java Applet的通信

蒙才
2023-03-14
问题内容

我正在尝试使用Applet中的setter方法,将HTML下拉列表中的选定值传递给Applet方法。但是每次调用Javascript时,都会显示“对象不支持此属性或方法”作为例外。

我的JavaScript代码:

function showSelected(value){
    alert("the value given from"+value);
    var diseasename=value;
    alert(diseasename);
    document.decisiontreeapplet.setDieasename(diseasename);

    alert("i am after value set ");
}

我的小程序代码:

package com.vaannila.utility;


import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;


import prefuse.util.ui.JPrefuseApplet;

public class dynamicTreeApplet extends JPrefuseApplet {

    private static final long serialVersionUID = 1L;
    public static int i = 1;
    public String dieasenameencode;
    //System.out.println("asjdjkhcd"+dieasenameencode);
    public void init() {
        System.out.println("asjdjkhcd"+dieasenameencode);
        System.out.println("the value of i is " + i);
        URL url = null;
        //String ashu=this.getParameter("dieasenmae");
        //System.out.println("the value of the dieases is "+ashu);

        //Here dieasesname is important to make the page refresh happen

        //String dencode = dieasenameencode.trim();
        try {
            //String dieasename = URLEncoder.encode(dencode, "UTF-8");
            // i want this piece of the code to be called 
            url = new URL("http://localhost:8080/docRuleToolProtocol/appletRefreshAction.do?dieasename="+dieasenameencode);
            URLConnection con = url.openConnection();
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setUseCaches(false);
            InputStream ois = con.getInputStream();
            this.setContentPane(dynamicView.demo(ois, "name"));
            ois.close();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (FileNotFoundException f) {
            f.printStackTrace();

        } catch (IOException io) {
            io.printStackTrace();
        }
        ++i;
    }

    public void setDieasename(String message){
        System.out.println("atleast i am here and call is made ");
        this.dieasenameencode=message;
        System.out.println("the final value of the dieasenmae"+dieasenameencode);

    }

}

我的appletdeployment代码:

<applet id="decisiontreeapplet" code="com.vaannila.utility.dynamicTreeApplet.class" archive="./appletjars/dynamictree.jar, ./appletjars/prefuse.jar" width ="1000" height="500" >    
</applet>

问题答案:

更改..

document.decisiontreeapplet

..至..

document.getElementById('decisiontreeapplet')

..并且最有可能工作。

例如

HTML

<html>
<body>
<script type='text/javascript'>
function callApplet() {
    msg = document.getElementById('input').value;
    applet = document.getElementById('output');
    applet.setMessage(msg);
}
</script>
<input id='input' type='text' size=20 onchange='callApplet()'>
<br>
<applet
    id='output'
    code='CallApplet'
    width=120
    height=20>
</applet>
</body>
</html>

Java

import javax.swing.*;

public class CallApplet extends JApplet {

    JTextField output;

    public void init() {
        output = new JTextField(20);
        add(output);
        validate();
    }

    public void setMessage(String message) {
        output.setText(message);
    }
}

还请考虑下一次发布简短的完整示例。请注意,上面显示的两个源中的行数比您的applet短,并且我花了更长的时间准备源,因此我可以检查我的答案。



 类似资料:
  • 我先说我对java有点生疏,所以如果是个愚蠢的错误,那就是原因。 我在Java中弄乱了小程序,并且在设置窗口大小和使用JOptionPane时遇到了一个问题,无论是只是显示消息,还是通过它获取输入,它都会显示三个或更多窗格,而不仅仅是一个窗格。我在Ubuntu 12.04(x64)上,这是我的测试代码仍然遇到问题:

  • 必须运行一些非常旧的遗留小程序。小程序最初使用JDK 1.4和IE。新系统是Edge和openJDK 11或更高版本。在旧系统中,我们使用Oracle JDK 8 witch实现了一个IE插件(Java插件11.321.2)。在网页(黑盒)上有一个启动“应用”的链接。任务管理器显示p2launcher。exe(Java(TM)Web启动器)。我真的不知道如何摆脱甲骨文。 到现在为止,我考虑过Ope

  • 我要迁移一个JavaApplet通过JNLP启动,作为一个Java的Web Start应用程序,并遇到一些麻烦/误解... 我得到的资源之一是这样的:6迁移JavaAppletJavaWeb Start和JNLP: 让我们开始吧,但是: 目前,该应用程序是一个小程序(),过去是通过将小程序标记嵌入到HTML中来启动的,小程序标记指的是JNLP。 现在,由于所有浏览器都放弃了对小程序的支持,我应该将

  • 问题内容: 在WKWebView中,我们可以使用webkit消息处理程序来调用ObjectiveC / swift代码,例如: 它非常适合没有参数的简单javascript函数。但; 是否可以使用JS回调函数作为参数来调用本机代码? 是否可以从本机代码向JS函数返回值? 问题答案: 不幸的是,我找不到本机解决方案。 但是以下解决方法解决了我的问题 使用JavaScript Promise,您可以从

  • react-native项目中使用react-native-webview嵌入vue页面,两种方式,在不同机型上无效. 方式一:直接使用window.postMessage(例如在 vivo z3手机(android9) 上vue页面监听方法不执行) 方式二:使用window.WebViewBridge.onMessage(例如在 小米手机(android13) 上vue页面监听方法不执行) 以上

  • 问题内容: 我看到有两个类似的线程,但找不到答案。 我正在制作android应用,我想使用node作为服务器进行实时通信。 我真的无法使它正常工作。 可能我把很多事情弄错了,但我想尝试理解。 我的服务器很简单 并且可以正常工作…我通过网络应用程序尝试了此操作,然后就可以连接了。 但是我不能用java .. 我尝试了kryonet,但出现了类似“已连接但注册超时”的异常 我尝试使用weberknec