You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从JavaScript调用Java Applet函数报错:document.PrintApplet.print不是函数

解决document.PrintApplet.print is not a function报错问题

1. 修复JSP中Applet的参数配置错误

你的Admin.jsp里有两个param标签存在语法错误:cache_version和permissions参数重复使用了name属性,正确格式应为name指定参数名,value指定参数值。错误的配置会导致Applet无法正确加载,自然找不到print方法。修正后的代码如下:

<object type="application/x-java-applet" 
     name="PrintApplet" width="1" height="1"> 
     <param name="codebase" value="applet" /> 
     <param name="cache_archive" value="PrintingApplet-0.1.3.jar" /> 
     <param name="code" value="com.abc.PrintApplet" /> 
     <param name="cache_version" value="1.0.0.1"/> 
     <param name="initial_focus" value="false">
     <param name="permissions" value="all-permissions"/>
</object>

2. 确保Applet完全初始化后再调用方法

Java Applet加载需要一定时间,直接在页面加载阶段调用其方法会因为Applet未就绪而报错。可以通过以下两种方式处理:

方式一:重试机制

在printLabel.js中添加重试逻辑,直到Applet的print方法可用:

function printLabel(p1, p2, p3, p4) {
    const applet = document.PrintApplet;
    if (applet && typeof applet.print === 'function') {
        applet.print(p1, p2, p3, p4);
    } else {
        // 延迟100ms重试,可根据实际情况调整重试次数
        setTimeout(() => printLabel(p1, p2, p3, p4), 100);
    }
}

方式二:Applet初始化回调

修改Java Applet代码,在init()方法完成后通知JavaScript:

import netscape.javascript.JSObject;
import java.applet.Applet;

public class PrintApplet extends Applet {
    @Override
    public void init() {
        // 原有初始化逻辑
        ...
        // 通知JavaScript Applet已就绪
        JSObject window = JSObject.getWindow(this);
        window.call("onAppletReady", null);
    }

    public void print(String p1, String p2, String p3, String p4) {
        // 打印业务逻辑
        ...
    }
}

然后在printLabel.js中监听回调:

let isAppletReady = false;

function onAppletReady() {
    isAppletReady = true;
}

function printLabel(p1, p2, p3, p4) {
    if (isAppletReady) {
        document.PrintApplet.print(p1, p2, p3, p4);
    } else {
        alert("打印控件正在加载,请稍后重试");
    }
}

3. 验证Applet方法签名与类路径

  • 确保Java Applet中的print方法是public修饰的,且参数类型与JavaScript传递的参数兼容(比如都是字符串类型)。
  • 确认WAR包的applet子目录下存在PrintingApplet-0.1.3.jar,且jar包内正确包含com.abc.PrintApplet类(注意Java类名大小写敏感)。

4. 检查浏览器兼容性

现代主流浏览器(Chrome 45+、Firefox 52+等)已移除对Java Applet的支持,需使用仍支持Applet的浏览器(如Firefox ESR 52系列、IE浏览器),并确保Java插件已启用。

内容的提问来源于stack exchange,提问作者Jim B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 23:31:12