发布时间 : 星期日 文章第十章 JavaApplet程序练习更新完毕开始阅读80da726448d7c1c708a145c4
第10章 Applet程序及线程处理
前边章节的实验主要是应用程序的练习,本章将进行Applet小应用程序及多线程处理的实验练习。
10.1 实验一:Applet程序及其应用
实验目的
(1). 了解Applet小应用程序的基本构成、执行方式、功能和作用。 (2). 基本掌握Applet小应用程序的编写及应用。 实验要求
使用Java提供的Applet和JApplet类创建Applet小程序,并使用两种方式(appletviwer和IE浏览器)执行程序,观看程序界面的区别和程序的执行效果。
实验内容
实验示例10.1.1 使用前边创建的输入职员信息类InputEmployeeMess2,构建Applet程序界面输入职员信息。
实现该示例的步骤如下: ⑴ 简要分析
在前边的实验中,创建了输入职员信息类InputEmployeeMess2用户界面,该界面是以JPanel组件构建的,因此可以将此组件放入Applet容器中。
⑵ 根据上述简要分析,可以给出如下参考程序代码(AppletPracticeExam1.java):
import javax.swing.*; import java.awt.*;
public class AppletPracticeExam1 extends JApplet {
public void init() {
this.getContentPane().add(new InputEmployeeMess2());//将JPanel对象放入JApplet容器上
} }
⑶ 编译AppletPracticeExam1.java程序,生成AppletPracticeExam1.class类文件,以供其他应用程序所用。
⑷ 程序及分析
本程序类是一个JApplet的子类,在程序中重写了init()方法,在方法中将InputEmployeeMess2对象放在Applet容器上,构成了Applet用户界面。
⑸ 编写测试程序,测试AppletPracticeExam1类的功能。Applet小应用程序是一个特殊的程序,必须嵌入到HTML网页文件中,由网页文件装入执行,网页文件Appletexam1.html程序代码如下:
使用Jdk提供的appletviwer工具或IE浏览器装入Appletexam1.html执行AppletPracticeExam1小应用程序,观看程序的执行效果。
自由练习10.1 仿照上述示例,使用前边创建的输入学生信息类,创建Applet应用程序,并以两种方式(appletviwer和IE浏览器)执行程序,观看程序界面的区别和程序的执行效果。
实验示例10.1.2 构建Applet程序界面,显示图像和播放音频,单击程序界面时,更新另一幅图像和音频。
实现该示例的步骤如下:
⑴ 简要分析
在Applet容器上绘制图像,需要重写paint()方法,在该方法中使用Griphics对象的drawImage()绘制图像。要播放音频文件,需要创建AudicClip对象,使用对象的play()方法播放音频。单击程序界面时,会产生鼠标事件,可以实现MouseListener接口,在mousePreesed()方法中实现图像文件和音频文件的更新。
将音频文件以sound0.wav、sound1.wav、… 命名,图像文件以dsc0.jpg、dsc1.jpg、…命名,并将它们存放在HTML文件的文件夹下。通过HTML文件传递参数的方式,向applet程序传递图像和音频文件名及其他信息,供applet程序正确获取并进行处理。
⑵ 根据上述简要分析,可以给出如下参考程序代码(AppletPracticeExam2.java):
import javax.swing.*; import java.applet.*;
public class AppletPracticeExam2 extends JApplet implements MouseListener {
int n=0,num;
Image images; //说明图像变量 AudioClip ac; //说明音频变量
String imgfile,acfile; //说明字符串变量 public void init() {
this.addMouseListener(this); //委派监听对象 imgfile=this.getParameter(\ acfile=this.getParameter(\
num=Integer.parseInt(this.getParameter(\
images=getImage(getDocumentBase(),imgfile+n+\创建图像对象 ac=getAudioClip(getDocumentBase(),acfile+n+\创建音频对象 }
public void paint(Graphics g) {
ac.play();//开始播放音频
g.drawImage(images,20,15,this); //绘制图像 }
/****实现MouseListener接口****/
public void mousePressed(MouseEvent me) {
n++;
n=n%num; //确定文件的序号
images=getImage(getDocumentBase(),imgfile+n+\创建图像对象 ac=getAudioClip(getDocumentBase(),acfile+n+\创建音频对象 this.repaint(); }
public void mouseClicked(MouseEvent me) {} public void mouseEntered(MouseEvent me){} public void mouseExited(MouseEvent me) {}
public void mouseReleased(MouseEvent me) {} }
⑶ 编译AppletPracticeExam2.java程序,生成AppletPracticeExam2.class类文件,以供其他应用程序所用。
⑷ 程序及分析
本程序类也是一个JApplet的子类,在类中定义了如下几个成员变量: n (int) 用于文件名序号的计数。
num (int) 用于存放图像及音频文件的数目。 images (Image) 用于创建图像文件对象。 ac (AudioClip) 用于创建音频文件对象。 imgfile (String) 用于记录图像文件的名字。 acfile (String) 用于记录音频文件的名字。
在程序中重写了init()方法,在方法中对监听鼠标事件委派了监听对象,获取了传递过来的参数,并创建了第一个要显示的图像对象、第一个要播放的音频对象。
程序实现了MouseListener接口,只用到了MousePressed()方法,在该方法中完成了图像和音频文件的更新,并调用applet容器对象的repaint()方法重绘容器界面,即显示新的图像文件并播放新的音频文件。其他接口方法没有使用,所以以空方法完成。
⑸ 编写测试程序,测试AppletPracticeExam2类的功能。Applet小应用程序是一个特殊的程序,必须嵌入到HTML网页文件中,由网页文件装入执行,网页文件Appletexam2.html程序代码如下:
使用Jdk提供的appletviwer工具或IE浏览器装入Appletexam2.html执行AppletPracticeExam2小应用程序,观看程序的执行效果。
自由练习10.2 在自由练习10.1的基础上进行修改,当输入完成一个学生的信息后,在界面上显示一幅笑脸,并播放一段音频表示当前的输入完成,准备下一个学生信息的录入。
10.2 实验二:多线程及其应用
实验目的
(1). 了解Java多线程程序的执行机制。
(2). 基本掌握多线程程序的编程方法,使用系统提供的Thread类和Runnable接口类对象实现多线程程序的应用。
实验要求
编写程序,使用Java提供的Thread类和Runnable接口类,实现简单的多线程应用。 实验内容
图8-3 示例8.31用户界面
使用Thread类和Runnabl接口类对象实现多线程的程序控制流程。
实验示例10.2.1 在上一章试验示例9.1.1中修改的Exercises类的基础上,加上限时、计时功能,即在给定测试题数目时,也给出测试时间,在测试的过程中每隔一分钟显示测试已进行的时间数和还剩余的时间数(以分钟计)。
实现该示例的步骤如下:
⑴ 简要分析
根据题意,要给出测试时间,首先需要考虑的是如何给出测试时间以及在什么地方给出测试时间比较合适,鉴于题目数量是在构建Exercises对象时给出的,因此限时时间也在此时给出比较合适,所以只需在构造方法中添加一个int 参数即可。
在答题的过程中,每隔一分钟显示已经进行的时间和剩余多长时间。这涉及到多线程处理,可以在类中实现Runnable接口,在接口的run()方法中完成计时并显示信息。
根据程序的功能,在确定程序运行机制后,可以在程序中定义一个静态的线程(THread)类变量,在程序中由该Thread对象启动线程进行计时处理。
⑵ 根据上述简要分析,可以给出如下修改后的参考程序代码(Exercises.java):
/*这是一个小学生综合训练题测试的应用程序 *程序的名称:Exercise.java
*程序中捕捉处理数据格式异常(NumberFormatException) */
import java.awt.*;
import java.awt.event.*; import java.util.*; import javax.swing.*; public class Exercises extends StudentScreen implements ActionListener,KeyListener,Runnable
{ int count = 0; int n1=0,n2=0; int total=0; int right=0;
int timenum=0,timecount=0; Random rand=new Random(); static Thread thread1;
public Exercises(int total,int timenum) {
this.total=total;
this.timenum=timenum;
num1.setText(\ num2.setText(\ info.setText(\测试题数:\道\
answer.setEnabled(false); //在没开始答题之前,不得答题 start.addActionListener(this); next.addActionListener(this); next.addKeyListener(this); answer.addKeyListener(this); }
/***Runnable接口方法实现***/ public void run() {
while(true) { try { thread1.sleep(60000); } //休眠1分钟
catch(InterruptedException e){System.out.print(\错误:\ timecount++;
if(timenum-timecount>0) { info.setText(\已经进行了\分钟,还剩余\分\
else {