import java.security.AccessController;
import java.security.PrivilegedAction;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JApplet;
import netscape.javascript.JSObject;
public class AppletTest extends JApplet{
/**
*
*/
private static final long serialVersionUID = 2171316410722327511L;
public AppletTest() {
System.out.println("AppletTest============1");
}
public void init() {
System.out.println("AppletTest============2");
new Thread(){
public void run(){
try{
while(true){
Thread.sleep(1000);
System.out.println("init=======================" + getTime());
}
}
catch(Exception e){
e.printStackTrace();
}
}
}.start();
String parame = "{\"success\":true,\"info\":\"加载完成\"}";
System.out.println("加载完成=======================" + getTime());
runJS("initFinish", parame); //调用客户端js方法的
}
/**
*
* @param json 传入的字符串数据
* @param fun 回调的函数
*/
public void myMethod(final String json, final String fun){
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
new Thread(){ // 另起线程,避免客户端等待applet返回数据卡死
public void run(){
try{
System.out.println("1Thread=======================" + getTime());
String parame = "{\"success\":true,\"info\":\"执行完毕\"}";
runJS(fun, parame); //调用客户端js方法的
}
catch(Exception e){
e.printStackTrace();
}
}
}.start();
System.out.println("2Thread=======================" + getTime());
return null;
}
});
}
public void runJS(final String jsFun, final String parame) {
new Thread(new Runnable() {
public void run() {
try {
String fun = "";
if(jsFun != null && !jsFun.equals("")){
fun = jsFun + "(" + parame + ")";
JSObject.getWindow(AppletTest.this).eval("javascript:" + fun + ";");
}
} catch (Throwable e) {
System.out.println("调用js出错=========" + e.getMessage());
}
}
}).start();
}
public void destroy() {
super.destroy();
System.out.println("================== destroy");
System.exit(0);
}
public static String getTime() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.format(new Date());
}
}
html文件如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js"></script>
<script>
var getTime = function(formatStr, date){
formatStr = arguments[0] || "yyyy-MM-dd HH:mm:ss";
date = arguments[1] || new Date();
var str = formatStr;
var Week = ['日','一','二','三','四','五','六'];
str=str.replace(/yyyy|YYYY/,date.getFullYear());
str=str.replace(/yy|YY/,(date.getYear() % 100)>9?(date.getYear() % 100).toString():'0' + (date.getYear() % 100));
str=str.replace(/MM/,date.getMonth()>9?(date.getMonth() + 1):'0' + (date.getMonth() + 1));
str=str.replace(/M/g,date.getMonth());
str=str.replace(/w|W/g,Week[date.getDay()]);
str=str.replace(/dd|DD/,date.getDate()>9?date.getDate().toString():'0' + date.getDate());
str=str.replace(/d|D/g,date.getDate());
str=str.replace(/hh|HH/,date.getHours()>9?date.getHours().toString():'0' + date.getHours());
str=str.replace(/h|H/g,date.getHours());
str=str.replace(/mm/,date.getMinutes()>9?date.getMinutes().toString():'0' + date.getMinutes());
str=str.replace(/m/g,date.getMinutes());
str=str.replace(/ss|SS/,date.getSeconds()>9?date.getSeconds().toString():'0' + date.getSeconds());
str=str.replace(/s|S/g,date.getSeconds());
return str;
}
var appletObj = function(){
this.myMethod = function(json, fun){
try{
this.getInstance().myMethod(json, fun);
console.log(getTime() + "======myMethod:");
}
catch(e){
console.error(getTime() + "====applet程序挂了,请刷新页面:" + e);
}
}
var tool;
this.getInstance = function(){
console.log(getTime() + "======typeof tool:" + (typeof tool));
console.log(getTime() + "======tool:" + tool);
if(typeof tool == 'undefined'){
console.log(getTime() + "======getInstance:");
tool = $("#tool")[0];
}
return tool;
}
return this;
}();
$(function(){
$("#btn").click(function(){
var parame = {data1:'test1'};
appletObj.myMethod(JSON.stringify(parame), "resultData");
});
});
function resultData(jsonObj){
console.log(getTime() + "========jsonObj:" + JSON.stringify(jsonObj));
console.log(getTime() + "======btn1Click:" + jsonObj.success);
}
function initFinish(jsonObj){
console.log(getTime() + "========applet init end:" + jsonObj.info);
}
</script>
</head>
<body>
<applet id="tool" code="AppletTest" codebase="." archive="AppletTest.jar" width="0" height="0" >
</applet>
<input type="button" id="btn" value="调用applet" />
</body>
</html>
/*
在applet调用js时出现错误
java.lang.NoClassDefFoundError: com/sun/deploy/appcontext/AppContext
at fxApplet.pringString(fxApplet.java:33)
at fxApplet.init(fxApplet.java:21)
at sun.applet.AppletPanel.run(AppletPanel.java:424)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.ClassNotFoundException: com.sun.deploy.appcontext.AppContext
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 4 more
*/
解决办法,在jdk或者jre下面找到jar: deploy.jar,引入到项目下面就可以了。如果没有这个jar,建议你重新下载一个jre或者jdk.
分享到:
相关推荐
在实现Java Applet调用JavaScript的过程中,需要导入netscape.javascript.JSObject类。这个类不是Java标准库的一部分,通常随浏览器一起提供,所以要确保用户的浏览器支持此功能。一旦获取了window的JSObject引用,...
考虑到Applet的局限性,现在更常见的文件上传解决方案是使用JavaScript、Ajax或现代Web框架(如React、Angular等)结合服务器端语言(如PHP、Python、Node.js等)实现。这些技术提供了更安全、更灵活的解决方案,且...
9. **异常处理**:良好的错误处理机制能确保Applet在遇到问题时不会突然崩溃,而是给出友好的提示信息。 这个“MyApplet”文件可能包含了Java源代码、HTML页面(用于嵌入Applet)以及可能的资源配置文件。要运行这...
这些方法在Applet的不同阶段被调用,帮助管理游戏的启动、暂停、恢复和终止。 5. **嵌入HTML**:在HTML文件中插入`<applet>`标签,指定Applet类名、代码基路径以及可选参数。 6. **测试与调试**:使用Java Applet ...
3. **Applet类**:Java的`java.applet.Applet`类是所有Java Applet的基础,包含了Applet生命周期的方法,如`init()`, `start()`, `stop()`, 和 `destroy()`,分别在Applet加载、开始、暂停和销毁时调用。 4. **图像...
`init()`方法在Applet加载时调用,用于进行设置工作,而`paint()`方法则负责绘制Applet的内容。 显示图片的关键在于使用`java.awt.Image`类和`java.awt.Graphics`类。首先,你需要加载图片文件。这可以通过`Image`...
在实际应用中,Java Applet由于安全性和浏览器兼容性问题,现在已逐渐被Java Web Start、JavaFX或其他Web技术(如JavaScript、HTML5 Canvas)取代。不过,其背后的编程思想和方法论仍然对理解现代Web应用开发有重要...
在Java Web Start或嵌入到HTML中的Applet中,我们可以加载JasperReport生成的报表,并通过Applet调用系统的打印服务,从而实现在客户端进行无服务器打印。然而,需要注意的是,由于安全限制和浏览器兼容性问题,Java...
1. **Java Applet生命周期**:Applets有初始化、启动、绘画、停止和销毁等生命周期方法,这些方法在Applet的不同阶段会被调用。 2. **HTML嵌入Applet**:HTML页面通过`<applet>`标签来加载和运行Java Applet,指定...
总结来说,Java调用IE内核主要涉及Java与ActiveX控件的交互,这一技术虽然有一定的历史背景,但在现代Web开发中已经较少使用,更多的现代解决方案倾向于使用标准Web技术或者基于Chromium的框架。理解和学习这个知识...
在“applet_poster.zip”这个压缩包中,我们预计会找到实现这一功能的相关代码和资源文件。接下来,我们将深入探讨微信小程序生成海报的原理、实现步骤以及可能涉及的关键技术。 首先,我们需要理解微信小程序的...
此外,还需要考虑如何正确处理用户输入,避免出现错误,比如除以零的异常。 考虑到Web安全性和性能,Applet在现代Web开发中已经逐渐被其他技术如JavaScript和HTML5替代。然而,这个项目仍然对学习Java基础、GUI编程...
在实际的开发过程中,可能还需要处理其他细节,如错误处理、分数显示、游戏暂停/恢复功能等。虽然Applet技术现在已经过时,但通过学习这个项目,我们可以回顾Java的历史,同时也能掌握基本的游戏编程概念。
Java Applet是Java的一种早期特性,它允许小段Java代码在网页中运行,提供交互性的功能,比如动画、游戏或者图形绘制。在这个特定的问题中,我们需要编写一个Java Applet程序来输出一个由星号(*)组成的正方形图案...
9. **错误处理与日志记录**: 系统应具备良好的错误处理机制,当发生异常时能够及时捕获并记录,便于后期调试和问题定位。 10. **测试与优化**: 开发完成后,系统需进行全面的功能测试、性能测试和兼容性测试,确保...
Java Applet是Java的一种早期应用形式,主要用于在Web浏览器中执行客户端的小型应用程序,特别是用于增强网页的功能。在这个"java-login.rar"压缩包中,我们很显然关注的是一个基于Java Applet实现的登录界面。这个...
`init()`方法用于初始化组件和设置,`start()`在applet启动时调用,`stop()`当浏览器离开包含applet的页面时调用,而`destroy()`用于清理资源。 在分数录入系统中,JApplet可能会包含以下主要组件: 1. **文本字段...
在浏览器下载完网页后,Applet启动并运行,如果需要访问数据库,它会调用JDBC接口,通过TCP/IP协议与数据库建立连接,从而绕过Web服务器。这种方式避免了Web服务器的超时限制,提高了效率,同时由于直接在客户端与...
- 其次,正确引入和配置 jsjava2.0.js 文件,以便在JavaScript环境中调用Java代码。 - 熟悉提供的API,理解如何创建Java对象、调用方法和传递参数。 - 注意错误处理,由于涉及到跨语言交互,可能出现兼容性或运行时...
【微信小程序源码- student-information-system-wechat-applet-master】是一个专门为学校教务管理设计的微信小程序项目。这个源码提供了完整的开发框架和功能模块,旨在帮助开发者快速构建一个高效、便捷的学生信息...