Java知多少(102)多媒体基础
本节介绍 Java程序播放幻灯片和动画,播放声音和视频的方法。
播放幻灯片和动画
用实例说明播放幻灯片和动画的方法。
【例 12-7】小应用程序先将幻灯片读入数组在存储,单击鼠标变换幻灯片,逐张显示。
import java.applet.*import java.awt.*;
import java.awt.event.*;
public class Example7_7 extends Applet implements MouseListener{
final int number = 50; //假定幻灯片有50张
int count = 0;
Image[] card = new Image[number];
public void init(){
addMouseListener(this);
for (int i = 0; i < number; i++){
card[i] = getImage(getCodeBase(), "DSC0033" + i + ".jpg");
}
}
public void paint(Graphics g){
if ((card[count]) != null)
g.drawImage(card[count], 10, 10, card[count].getWidth(this),card[count].getHeitht(this), this);
}
public void mousePressed(MouseEvent e){
count = (count + 1) % number; //循环逐张显示
repaint();
}
public void mouseRelease(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(Mouse Event e){}
public void mouseClicked(MouseEvent e){}
}
【例 12-8】小应用程序说明播放动画的方法,要求播放的图片和小程序放在相同的目录中,程序通过快速显示一组图片造成显示动画的效果。小应用程序利用线程控制动画图片的逐显示。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Example7_8 extends Applet implements Runnable{
final int number = 50;
int count = 0;
Thread mythread;
Image[] pic = new Image[number];
public void init(){
setSize(300, 200);
for (int i = 0; i <= number; i++){
//载入动画图片
pic[i - 1] = getImage(getCodeBase(), "DSC0033" + i + ".jpg");
}
}
public void start(){
mythread = new Thread(this); //创建一个线程
mythread.start(); //启动线程执行
}
public void stop(){
mythread = null;
}
public void run(){
//线程的执行代码
while (true){
repaint();
count = (count + 1) % number; //改变显示的图片号
try{
mhythread.sleep(200);
}
catch (InterruptedExeception e){}
}
}
public void paint(Graphics g){
if ((pic[count] != null)
g.drawImage(pic[count], 10, 10, pic[count].getwidth(this), pic[count].getHeight(this), this);
}
}
播放声音
Java语言老根据地的音频格式有多种:au、aiff、wav、midi、rfm等。小程序要播放音频文件,可使用类AudioClip,该类在java.applet.AudioClip类库中定义。小程序先创建AudioClip对象,并用getAudioClip()方法为其初始化。代码形式如下:
AudioClip audioClip = getAudioClip(getCodeBase(),”myAudioClipFile.au”);
如果要从网上获得音频文件,可用方法getAudioClip(URL url, String name),根据url地址及音频文件name获得可播放的音频对象。
控制声音的播放有3个方法:play()播放声音,loop()循环播放和stop()停止播放。
【例 12-9】能播放声音的小应用程序。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Example7_9 extends Applet implements ActionListener{
AudioClip clip; //声明一个音频对象
Button buttonPlay, buttonLoop, buttonStop;
public void init(){
clip = getAudioClip(getCodeBase(), "2.wav");
//根据程序所在地址处声音文件2.wav创建音频对象,
//Applet类的getCodeBase()方法可以获得小程序所在的html页面的URL地址。
buttonPlay = new Button("开始播放");
buttonLoop = new Button("循环播放");
buttonStop = new Button("停止播放");
buttonPlay.addActionListener(this);
buttonStop.addActionListener(this);
buttonLoop.addActionListener(this);
add(buttonPlay);
add(buttonLoop);
add(buttonStop);
}
public void stop(){
clip.stop(); //当离开此页面时停止播放
}
public void actionPerformed(ActionEvent e){
if (e.getSource() == buttonPlay){
clip.play();
}
else if (e.getSource() == buttonLoob){
clip.loop();
}
else if (e.getSource() == buttonStop){
clip.stop();
}
}
}
【例 12-10】如果声音文件较大或网络速度慢会影响小程序的初始化工作。这可用多线程技术解决。在一个级别较低的线程中完成音频对象的创建,即由后台载入声音文件,前台播放。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Hanoi extends applet implements Runnable, ActionListener{
AudioClip clip; //声明一个音频对象
textField text;
Thread thread;
Button buttonPlay, buttonLoop, buttonStop;
public void init(){
thread = new Thread(this); //创建新线程
thread .setPriority(Thread.MIN_PRIORITY);
buttonPlay = new Button("开始播放");
buttonLoop = new Button( "循环播放");
buttonStop = new Button("停止播放");
text = new textField(12);
buttonPlay.addActionListener(this);
buttonStop.addActionListener(this);
buttonLoop.addActionListener(this);
add(buttonPlay);
add(buttonLoop);
add(buttonStop);
add(text);
}
public void start(){
thread.start();
}
public void stop(){
clip.stop();
}
public void actionPerformed(ActionEvent e){
if (e.getSource() == buttonPlay(){
clip.play();
}
else if (e.getSource() == buttonLoop(){
clip.loop();
}
else if (e.getSource() == buttonStop(){
clip.stop();
}
}
public void run(){
//在线程thread 中创建音频对象
clip = getAudioclip(getCodeBase(), "2.wav");
text.setText("请稍等");
if(clip ! = null){
buttonPlay.setBackground(Color.red); buttonLoop.setBackground(Color.green); text.setText("您可以播放了");
} //获得音频对象后通知可以播放
}
}
系列文章:
Java知多少(102)多媒体基础的更多相关文章
- Java知多少(74)基础类库
Java 的类库是 Java 语言提供的已经实现的标准类的集合,是 Java 编程的 API(Application Program Interface),它可以帮助开发者方便.快捷地开发 Java ...
- Java知多少(81)框架窗口基础
窗口是GUI编程的基础,小应用程序或图形界面的应用程序的可视组件都放在窗口中,在GUI中,窗口是用户屏幕的一部分,起着在屏幕中一个小屏幕的作用.有以下三种窗口: Applet窗口:Applet类管理这 ...
- Java知多少(83)面板基础:JPanel和JScrollPane
面板有两种,一种是普通面板(JPanel),另一种是滚动面板(JScrollPane). JPanel 面板是一种通用容器,JPanel的作用是实现界面的层次结构,在它上面放入一些组件,也可以在上面绘 ...
- Java知多少(95)绘图基础
要在平面上显示文字和绘图,首先要确定一个平面坐标系.Java语言约定,显示屏上一个长方形区域为程序绘图区域,坐标原点(0,0)位于整个区域的左上角.一个坐标点(x,y)对应屏幕窗口中的一个像素,是整数 ...
- Java知多少(100)图像处理基础
图像是由一组像素构成,用二进制形式保存的图片.java语言支持GIF.JPEG和BMP这3种主要图像文件格式.java语言的图像处理功能被封装在Image类中. 图像载入和输出 在java程序中,图像 ...
- Java知多少(43)异常处理基础
Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象.当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被抛出(throw).该方法可以选择自己处理异常或传递该异常.两种 ...
- Java知多少(完结篇)
Java知多少(1)语言概述 Java知多少(2)虚拟机(JVM)以及跨平台原理 Java知多少(3) 就业方向 Java知多少(4)J2SE.J2EE.J2ME的区别 Java知多少(5) Java ...
- Java知多少(下)
Java知多少(78)Java向量(Vector)及其应用 Java知多少(79)哈希表及其应用 Java知多少(80)图形界面设计基础 Java知多少(81)框架窗口基础 Java知多少(82)标签 ...
- Java知多少(112)数据库之删除记录
删除数据表也有3种方案 一.使用Statement对象 删除数据表记录的SQL语句的语法是: delete from 表名 where 特定条件 例如 : delete from ksInfo whe ...
随机推荐
- 获取AFP服务信息
获取AFP服务信息 如果苹果系统开放TCP 548端口,说明其开启了AFP服务.这个时候,可以使用Nmap的afp-serverinfo脚本获取对应的服务信息.获取的信息包括服务名.机器类型.AF ...
- RBF(径向基)神经网络
只要模型是一层一层的,并使用AD/BP算法,就能称作 BP神经网络.RBF 神经网络是其中一个特例.本文主要包括以下内容: 什么是径向基函数 RBF神经网络 RBF神经网络的学习问题 RBF神经网络与 ...
- CRC类(处理ITU表)
class Crc { // CRC-ITU查找表 private static UInt16[] crctab16 = new UInt16[] { 0x0000, 0x1189, 0x2312, ...
- python-线程的暂停, 恢复, 退出
我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦s ...
- POJ.1160.Post Office(DP 四边形不等式)
题目链接 \(Description\) 一条直线上有n个村庄,位置各不相同.选择p个村庄建邮局,求每个村庄到最近邮局的距离之和的最小值. \(Solution\) 先考虑在\([l,r]\)建一个邮 ...
- node+koa2 向页面传值方式
1. router.post('/form',async(ctx,next)=>{ const form = ctx.request.body; console.log('用户名:'+form. ...
- node+koa2获取请求参数
1.get方式: http://localhost:3000/?user=000001&body=0002&age=26 const router = require('koa-rou ...
- Unsupported major.minor version ,
一.错误现象: 当改变了jdk版本时,在编译java时,会遇到Unsupported major.minor version错误. 错误信息如下 : Unsupported major.minor ...
- tcp连接状态查看
linux常用查看tcp状态工具netstat和ss,这两个工具查看时都有1个Recv-Q和Send-Q 解释如下: 对应处于Listen状态的套接字: Recv-Q表示已建立连接队列中连接个数(等待 ...
- AngualrJS中每次$http请求时的一个遮罩层Directive
在AngualrJS中使用$http每次向远程API发送请求,等待响应,这中间有些许的等待过程.如何优雅地处理这个等待过程呢? 如果我们在等待过程中弹出一个遮罩层,会是一个比较优雅的做法. 这就涉及到 ...