Applet与javacript通信

本文展示了如何在Java Applet中使用JavaScript进行交互,包括弹窗对话框的显示、鼠标事件监听以及调用JavaScript方法。通过实例代码,详细介绍了如何在Applet中实现这些功能,并讨论了在不同浏览器环境下可能遇到的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 netscape.javascript.JSException;
 netscape.javascript.JSObject;

这两个类在c:/windows/java/package/目录下有个5M左右的zip文件里,拿出来弄成jar包即可。(jre下有个小点的jar包:plugin.jar 用这个最好)

package applet;


import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.Timer;

import netscape.javascript.JSException;
import netscape.javascript.JSObject;

public class Test extends Applet implements MouseListener{

    int mouseX=0;
    int mouseY=0;
    
    JSObject win = null; ;
    JSObject doc;
    
    public void paint(Graphics g) {
        //Draw a rectangle width=250, height=100
        g.drawRect(0,0,250,100);
        //Set the color to blue
        g.setColor(Color.blue);
        //Write the message to the web page
        g.drawString("Look at me, I'm a Java ccccccc"+mouseY+"  "+mouseX,10,50);
        
        
    
        }
    
    
    public void showDialogIn() throws Exception{
        String name = JOptionPane.showInputDialog("请输入你的姓名:");
        JOptionPane.showMessageDialog(null, "输入的姓名是:"+name);
//        win.eval("javascript:alert(\""+name+"\")");
//        win.eval("javascript:showMsg(\""+name+"\")");
     try {
            win = JSObject.getWindow(this);

            win.eval("javascript:alert('bbbbbbbbbbb')");

            //这里调用js里的方法

            win.eval("javascript:showMsg('"+name+"');");
        } catch (JSException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

//        doc =(JSObject)win.getMember("document");

//         下面这里直接调用方法 不成功,页面提示 找不到方法,不知道什么原因

//        doc.call("showMsg", new Object[]{name});
    }
        
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    

    public void init() {
        System.out.println("init..........");
        this.addMouseListener(this);
        
        

    }

    public static void showTime(JLabel jlabel) {
        
    }

    public void start() {
    
    }

    public void mouseClicked(MouseEvent e) {
        JOptionPane.showMessageDialog(null,"aaa"+e.getID()+" ","提示",JOptionPane.WARNING_MESSAGE);
        
    }

    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
        mouseX = e.getX();
        mouseY = e.getY();
        repaint();
        
    }

    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }

    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }

    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
        
    }

}





<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0">
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="/WEB-INF/jsp/ccs/includes.jsp" %>
<%@ taglib prefix="lms" uri="/WEB-INF/tld/lms.tld" %>
<HTML>
  
<HEAD>

      <TITLE>MyFirstJavaApplet</title>
      
</HEAD>
  
<BODY>
  Here'smyfirstJavaApplet:sdfsadfa bbbbbbbbbbbbb

 <input type="button" value="go000" onclick="showWindowIn()"/>  

bbbb
<applet  name="Test"  width="100" height="100" code="applet/Test.class" archive="netscape.jar" MAYSCRIPT>

</applet>

//以下是用htmlconverter转换后生成的
<object name="ShowTaskApplet"
        classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
        codebase="http://java.sun.com/update/1.6.0/jinstall-6u20-windows-i586.cab#Version=6,0,0,6"
        WIDTH="0" HEIGHT="0" ALT="文件上传applet小程序">
    <PARAM NAME=CODE VALUE="com.wiscom.lms.applet.FileUploadApplet.class">
    <PARAM NAME=CODEBASE VALUE="./applet">
    <PARAM NAME=ARCHIVE VALUE="uploadApplet.jar,commons-logging-1.1.1.jar,commons-net-3.0.1.jar,plugin.jar">
    <param name="type" value="application/x-java-applet;version=1.6">
    <PARAM NAME = MAYSCRIPT VALUE = "true" >
    <PARAM NAME="type" VALUE="application/x-java-applet;version=1.6">
    <PARAM NAME="scriptable" VALUE="false">
    <PARAM NAME="host" VALUE="172.16.41.27">
    <PARAM NAME="port" VALUE="21">
    <PARAM NAME="userName" VALUE="cc">
    <PARAM NAME="password" VALUE="cc">
    <PARAM NAME="acceptAllFileFilterUsed" VALUE="false">
    <PARAM NAME="isDirectorySelectionEnabled" VALUE="true">
    <PARAM NAME="ftpPath" VALUE="/aaa/bbb/">


    <comment>
        <embed id="app"
                type="application/x-java-applet;version=1.6"
        \
        CODE = "com.wiscom.lms.applet.FileUploadApplet.class" \
        JAVA_CODEBASE = "./applet" \
        ARCHIVE = "uploadApplet.jar,commons-logging-1.1.1.jar,commons-net-3.0.1.jar,plugin.jar" \
        ALT = "文件上传applet小程序" \
        WIDTH = "400" \
        HEIGHT = "300" \
        MAYSCRIPT = true \
        MAYSCRIPT = "true" \
        type ="application/x-java-applet;version=1.6" \
        scriptable ="false" \
        host ="172.16.41.27" \
        port ="21" \
        userName ="cc" \
        password ="cc" \
        acceptAllFileFilterUsed ="true" \
        isDirectorySelectionEnabled ="true" \
        isFileSelectionEnabled ="true" \
        fileNameExtension ="" \
        isFileHidingEnabled ="false" \
        isMultiSelectionEnabled ="true" \
        maxFileSize ="2147483648"
        scriptable = false
        pluginspage = "http://java.sun.com/products/plugin/index.html#download">
        <noembed>
            </xmp>
        </noembed>
        </embed>
    </comment>
</object>
<script type="text/javascript">
   var DownLoad= function(){};
   function showWindowIn(){
       try{

  //IE里用object的name   firefox里用embed  id    //调用的方法都是applet里的public方法  

var app =document.getElementById('uploadAppletApp');
        if(app==null||typeof app =='undefined'){
            window.document.ShowTaskApplet.showTaskFrame();
        }else{
            app.showTaskFrame();
        }
       }catch(e){
           alert(e);
       }
   }

   function  showMsg(s){
       alert("您输入的是:"+s);
   }



</script>


  
</BODY>
  
</HTML>

===============================================================================================

以上代码不能直接运行,只是将各个关键步骤写下来,自己修改即可

===============================================================================================

附: js调用applet方法有些限制,js调用applet方法时applet的认证会失效,相当于没有认证。

见文章:http://docs.oracle.com/javase/tutorial/deployment/applet/security.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值