一、Applet开发环境准备

IDEA在2018版本默认提供了Applet启动配置

创建一个Applet应用配置:

在IDEA2019版本之后,这个应用配置选项被移除了,改为Java Applet Support插件来提供支持

插件支持在2019版本和之后所有版本(猜测)适用

参考博客:

https://blog.csdn.net/yuanzic1/article/details/121277865

  

二、Applet快速上手

1、创建一个普通Class类文件,然后编写Applet应用代码:

package cn.cloud9.applet;

import java.applet.Applet;
import java.awt.*; /**
* @projectName: Applet
* @author: Cloud9
* @date: 2022年08月30日 09:13
* @version: 1.0
*/
public class QuickStartApplication extends Applet { @Override
public void paint(Graphics graphics) {
graphics.drawString ("Hello Java Applet", 25, 50);
}
}

2、打开运行配置编辑框,创建一个Applet应用

执行方式分为两种

- 指定Applet类执行

- 指定内嵌定位了的Applet类的HTML文件执行

首先选择第一种读取Applet类执行

注意追加AppletViewer启动参数:

-Dfile.encoding=GBK

AppletViewer默认窗口渲染的字体编码跟随操作系统,也就是GBK

最后是指定JRE的HOME目录,一般默认即可

如果不追加编码参数,则渲染窗口的选项卡文本乱码

上述参数配置完成后保存,然后直接启动即可运行:

3、以HTML文件方式执行Applet

在Resource目录下新建HTML文件

- 编写普通HTML文档标记代码

- 在Body标签中编写Applet标签,必须指定code属性和宽度高度属性

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>Java Applet HTML页面测试</h3>
<hr>
<applet code="cn.cloud9.applet.QuickStartApplication.class" width="320" height="120" ></applet>
</body>
</html>

code属性声明目标的资源位置,因为html文件并不和Applet在同一个包下

所以需要声明完整的类路径

可以再追加codebase属性,声明class文件的根目录位置:

<applet code="cn.cloud9.applet.QuickStartApplication.class" codebase="./" width="320" height="120" ></applet>

配置HTML方式的启动项:

运行结果:

好像除了Applet的资源外,HTML代码不渲染解析,和直接加载Applet类文件没有区别

三、Applet的生命周期

Applet生命周期对应了这4个方法

- init 初始化Applet实例

- start 实例初始化完成,开始加载

- stop 实例停止执行

- destory 应用关闭,实例停止后销毁

- paint 该方法在start()方法之后立即被调用,或者在applet需要重绘在浏览器的时候调用

package cn.cloud9.applet;

import java.applet.Applet;
import java.awt.*; /**
* @projectName: Applet
* @author: Cloud9
* @date: 2022年08月30日 09:58
* @version: 1.0
*/
public class AppletLifeCycle extends Applet { @Override
public void paint(Graphics graphics) {
graphics.drawString ("Hello Java Applet", 25, 50);
} @Override
public void init() {
System.out.println("Applet 初始化... ");
} @Override
public void start() {
System.out.println("Applet 初始完毕 开始执行 用户访问Applet页面 ... ");
} @Override
public void stop() {
System.out.println("Applet 停止运行 用户从Applet页面跳转... ");
} @Override
public void destroy() {
System.out.println("Applet 实例被销毁 用户退出了Applet应用... ");
}
}

 

配置AppletViewer启动项运行后,可以使用Viewer的调试选项:

通过上述的几个选项,可以在控制台输出中查看对应的周期方法触发

四、参数获取

创建一个参数获取的Applet类:

getParameter方法可以读取html标签上设置的param标签信息

package cn.cloud9.applet;

import java.applet.Applet;
import java.awt.*; /**
* @projectName: Applet
* @author: Cloud9
* @date: 2022年08月30日 10:18
* @version: 1.0
*/
public class AppletParamsGet extends Applet { @Override
public void paint(Graphics graphics) {
graphics.drawString ("Hello Java 参数读取", 25, 50); // 获取单个具体参数
String username = getParameter("username");
String password = getParameter("password");
String email = getParameter("email");
System.out.println("username -> " + username);
System.out.println("password -> " + password);
System.out.println("email -> " + email);
} @Override
public void init() {
System.out.println("Applet 初始化... ");
} @Override
public void start() {
System.out.println("Applet 初始完毕 开始执行 用户访问Applet页面 ... ");
} @Override
public void stop() {
System.out.println("Applet 停止运行 用户从Applet页面跳转... ");
} @Override
public void destroy() {
System.out.println("Applet 实例被销毁 用户退出了Applet应用... ");
}
}

  

编写对应的HTML文件:

在applet标签嵌套的内容中编写param标签,分为Name和Value两个属性

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<applet code="cn.cloud9.applet.AppletParamsGet.class" codebase="./" width="320" height="120" >
<param name="username" value="张三"/>
<param name="password" value="qwer1234!@#$"/>
<param name="email" value="1791255334@qq.com"/>
</applet> </body>
</html>

  

启动测试结果:

username -> 寮犱笁
password -> qwer1234!@#$
email -> 1791255334@qq.com

  

五、事件监听

重写鼠标监听适配器抽象类

package cn.cloud9.applet.listener;

import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; /**
* @projectName: Applet
* @author: Cloud9
* @date: 2022年08月30日 10:54
* @version: 1.0
*/
public class MyMouseListener implements MouseListener {
/**
*
* 鼠标点击事件 左键右键都监听
* @param e
* @return void
* @author Cloud9
* @createTime 2022/8/30 10:53
*
*/
@Override
public void mouseClicked(MouseEvent e) {
Point point = e.getPoint();
int x = point.x;
int y = point.y;
System.out.printf("点击事件触发! 坐标 %d, %d \n", x, y);
} /**
*
* 鼠标键按下
* @param e
* @return void
* @author Cloud9
* @createTime 2022/8/30 10:53
*
*/
@Override
public void mousePressed(MouseEvent e) {
Point point = e.getPoint();
int x = point.x;
int y = point.y;
System.out.printf("鼠标按下事件触发! 坐标 %d, %d \n", x, y);
} /**
*
* 鼠标键释放
* @param e
* @return void
* @author Cloud9
* @createTime 2022/8/30 10:52
*
*/
@Override
public void mouseReleased(MouseEvent e) {
Point point = e.getPoint();
int x = point.x;
int y = point.y;
System.out.printf("鼠标按键释放事件触发! 坐标 %d, %d \n", x, y);
} /**
*
* 鼠标进入
* @param e
* @return void
* @author Cloud9
* @createTime 2022/8/30 10:52
*
*/
@Override
public void mouseEntered(MouseEvent e) {
Point point = e.getPoint();
int x = point.x;
int y = point.y;
System.out.printf("鼠标进入窗口事件触发! 坐标 %d, %d \n", x, y);
} /**
*
* 鼠标退出
* @param e
* @return void
* @author Cloud9
* @createTime 2022/8/30 10:52
*
*/
@Override
public void mouseExited(MouseEvent e) {
Point point = e.getPoint();
int x = point.x;
int y = point.y;
System.out.printf("鼠标退出窗口事件触发! 坐标 %d, %d \n", x, y);
} }

在Applet应用类初始化时,注册自定义的监听器实现类

package cn.cloud9.applet;

import cn.cloud9.applet.listener.MyMouseListener;

import java.applet.Applet;
import java.awt.*; /**
* @projectName: Applet
* @author: Cloud9
* @date: 2022年08月30日 10:47
* @version: 1.0
*/
public class AppletEventListen extends Applet {
@Override
public void paint(Graphics graphics) {
graphics.drawString ("Hello Java Applet", 25, 50);
} @Override
public void init() {
System.out.println("Applet 初始化... "); // 添加事件监听处理
this.addMouseListener(new MyMouseListener());
} @Override
public void start() {
System.out.println("Applet 初始完毕 开始执行 用户访问Applet页面 ... ");
} @Override
public void stop() {
System.out.println("Applet 停止运行 用户从Applet页面跳转... ");
} @Override
public void destroy() {
System.out.println("Applet 实例被销毁 用户退出了Applet应用... ");
}
}

监听鼠标点击和在窗口中的事件:  

这里只是以鼠标监听事件为例,下面还有这些监听事件类:

六、加载图片

resources目录存放一张java.jpg

resources/image/java.jpg

图片Applet类编写:

package cn.cloud9.applet;

import java.applet.Applet;
import java.applet.AppletContext;
import java.awt.*;
import java.net.MalformedURLException;
import java.net.URL; /**
* @projectName: Applet
* @author: Cloud9
* @date: 2022年08月30日 11:28
* @version: 1.0
*/
public class AppletShowImage extends Applet { private AppletContext appletContext;
private Image image; @Override
public void paint(Graphics graphics) {
appletContext.showStatus("Displaying image");
graphics.drawImage(image, 0, 0, 266, 413, null);
graphics.drawString("www.javalicense.com", 50, 414);
} @Override
public void init() {
appletContext = this.getAppletContext();
String appletInfo = this.getAppletInfo();
System.out.println("Applet 初始化... " + appletInfo); String imageUrl = this.getParameter("image");
if (null == imageUrl) imageUrl = "./image/java.jpg";
URL documentBase = this.getDocumentBase(); try {
URL url = new URL(documentBase, imageUrl);
image = appletContext.getImage(url); } catch (MalformedURLException e) {
e.printStackTrace();
}
}
}

HTML文件编写:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<applet code="cn.cloud9.applet.AppletShowImage.class" width="420" height="420" >
<param name="image" value="./image/java.jpg" />
</applet>
</body>
</html>

  

加载效果,但是发现默认不展示,需要通过拖拽窗口触发重新渲染或者点击启动调试才可以

7、加载音频

音频Applet代码:

注意,Applet读取音频文件,只能播放au音频

在线音频转换地址: https://convertio.co/zh/

package cn.cloud9.applet;

import java.applet.Applet;
import java.applet.AppletContext;
import java.applet.AudioClip;
import java.net.MalformedURLException;
import java.net.URL; /**
* @projectName: Applet
* @author: Cloud9
* @date: 2022年08月30日 13:57
* @version: 1.0
*/
public class AudioApplet extends Applet {
private AudioClip audioClip;
private AppletContext appletContext; @Override
public void init() {
appletContext = this.getAppletContext();
String audioUrl = this.getParameter("audio");
if (null == audioUrl) audioUrl = "./audio/tip-sound.au"; try {
URL url = new URL(this.getDocumentBase(), audioUrl);
audioClip = appletContext.getAudioClip(url);
} catch (MalformedURLException e) {
e.printStackTrace();
appletContext.showStatus("Could not load audio file!");
}
} @Override
public void start() {
if (null != audioClip) audioClip.loop();
} @Override
public void stop() {
if (null != audioClip) audioClip.stop();
}
}

  

HTML文件:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<applet code="cn.cloud9.applet.AudioApplet.class" width="420" height="420" >
<param name="audio" value="./audio/tip-sound.au" />
</applet>
</body>
</html>

  

【Java】Applet开发的更多相关文章

  1. Java EE开发技术课程第五周(Applet程序组件与AJAX技术)

    1.Applet程序组件 1.1.定义: Applet是采用Java编程语言编写的小应用程序,该程序可以包含在HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同.含有Apple ...

  2. Java Applet与Java Application的特点

    java application是应用程序,用于桌面开发,java applet是小应用程序,一般嵌入到网页里运行.applet一般用于B/S页面上作为插件式的开发,而application主要是桌面 ...

  3. [置顶] Java Web开发教程来袭

    Java Web,是用Java技术来解决相关web互联网领域的技术总和.web包括:web服务器和web客户端两部分.Java在客户端的应用有java applet不过现在使用的很少,Java在服务器 ...

  4. Java Applet实现五子棋游戏

    从谷歌的AlphaGo到腾讯的绝艺,从人脸识别到无人驾驶,从谷歌眼镜到VR的兴起,人工智能领域在不断的向前迈进,也在不断深入的探索.但背后错综复杂的技术和利益成本也是很多企业亟待解决的难题.对于人工智 ...

  5. 《深入理解Java虚拟机》-----第7章 虚拟机类加载机制——Java高级开发必须懂的

    代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. 7.1 概述 上一章我们了解了Class文件存储格式的具体细节,在Class文件中描述的各种信息,最终都需要 ...

  6. java web开发阅读笔记:第一章

    学习该书前所用推荐书籍<名师讲坛—java开发实战经典> 一web开发前奏 1.1网页发展 首先搞懂. 1.HTTP:超级文本传输协议,是一种通讯协议. 通过这个网络协议WW浏览器与WWW ...

  7. Java - 33 Java Applet基础

    Java Applet基础 applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以applet是一个全功能的Java应用程序. 如下所示是独 ...

  8. Java Applet小应用

    开发和部署方式     嵌入到HTML网页中,用<Applet></Applet>标签识别.java环境用浏览器的,在第一次打开时下载,可开发成以后打开,默认不必再次下载.也可 ...

  9. Java Applet基础

    applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以applet是一个全功能的Java应用程序. 如下所示是独立的Java应用程序和app ...

  10. Java-Runoob-高级教程:Java Applet 基础

    ylbtech-Java-Runoob-高级教程:Java Applet 基础 1.返回顶部 1. Java Applet 基础 Applet 是一种 Java 程序.它一般运行在支持 Java 的 ...

随机推荐

  1. C# asp.net mvc 创建虚拟目录

    使用背景: 虚拟目录(virtual directory),计算机术语,每个 Internet服务可以从多个目录中发布.通过以通用命名约定 (UNC) 名.用户名及用于访问权限的密码指定目录,可将每个 ...

  2. (拼多多)pdd的Anti-Content

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6 ...

  3. 美团面试:说说Netty的零拷贝技术?

    零拷贝技术(Zero-Copy)是一个大家耳熟能详的技术名词了,它主要用于提升 IO(Input & Output)的传输性能. 那么问题来了,为什么零拷贝技术能提升 IO 性能? 1.零拷贝 ...

  4. go.mod file not found in current directory or any parent directory; see 'go help modules' (exit status 1)

    go.mod file not found in current directory or any parent directory; see 'go help modules' (exit stat ...

  5. 使用腾讯元宝+markmap生成思维导图

    AI可以帮助我们进行提炼和总结, 节省了大量搜索资料和查阅的时间,像上图这张思维导图,就是使用腾讯元宝大模型进行内容提炼,再使用markmap生成思维导图,下面讲解下详细实现步骤: 一.工具准备 腾讯 ...

  6. Scrapy爬取知名技术文章网站

    scrapy安装以及目录结构介绍 创建有python3的虚拟环境 mkvirtualenv mkvirtualenv py3env 安装scrapy 进入虚拟环境py3env,把pip的源设置为豆瓣源 ...

  7. 数据分析---matplotlib模块的使用

    1.摘要 在数据可视化.统计绘图和图表生成领域,Python 被广泛使用,其中 Matplotlib 是一个极其重要的基础三方库.本博客旨在介绍 Python 及其三方库 Matplotlib 的详细 ...

  8. git clone 时拉取子模块

    git clone 时拉取子模块 对还未下载的项目: git clone --recursive 对已下载的项目: git submodule sync git submodule update -- ...

  9. 图最短路径之Dijkstra

    Dijkstra's shortest path algorithm 算法参考地址:Dijsktra's algorithm (geeksforgeeks.org) 算法的简介: 1)该算法用来计算最 ...

  10. 背包DP——完全背包

    完全背包模型与 0-1 背包类似,与 0-1 背包的区别仅在于一个物品可以选取无限次,而非仅能选取一次. 而状态转移方程于01背包区别在于可以直接从[i][j-w[i]]转移 理由是当我们这样转移时, ...