package play;
import javax.media.*;
import java.awt.*;
import java.awt.event.*;
class MediaPlayer extends Frame implements ActionListener,ControllerListener,ItemListener
{
Player player;
Component vc, cc;
boolean first = true, loop = false;
String currentDirectory;
MediaPlayer (String title)
{
super (title);
addWindowListener(new WindowAdapter ()
{
public void windowClosing (WindowEvent e)
{
// 用户点击窗口系统菜单的关闭按钮
// 调用dispose以执行windowClosed
dispose ();
}
public void windowClosed (WindowEvent e)
{
if (player != null) player.close ();
System.exit (0);
}
});
Menu m = new Menu ("文件");
MenuItem mi = new MenuItem ("打开");
mi.addActionListener (this);
m.add (mi);
m.addSeparator ();
CheckboxMenuItem cbmi = new CheckboxMenuItem ("循环", false);
cbmi.addItemListener (this);
m.add (cbmi);
m.addSeparator ();
mi = new MenuItem ("退出");
mi.addActionListener (this);
m.add (mi);
MenuBar mb = new MenuBar ();
mb.add (m);
setMenuBar (mb);
setSize (200, 200);
setVisible (true);
}
public void actionPerformed (ActionEvent e)
{
if (e.getActionCommand ().equals ("退出"))
{
// 调用dispose以便执行windowClosed
dispose ();
return;
}
FileDialog fd = new FileDialog (this, "打开媒体文件",
FileDialog.LOAD);
fd.setDirectory (currentDirectory);
fd.show ();
// 如果用户放弃选择文件,则返回
if (fd.getFile () == null) return;
currentDirectory = fd.getDirectory ();
if (player != null)
player.close ();
try
{
player = Manager.createPlayer (new MediaLocator
("file:" + fd.getDirectory () + fd.getFile ()));
}
catch (java.io.IOException e2)
{
System.out.println (e2);
return;
}
catch (NoPlayerException e2)
{
System.out.println ("不能找到播放器.");
return;
}
if (player == null)
{
System.out.println ("无法创建播放器.");
return;
}
first = false;
setTitle (fd.getFile ());
player.addControllerListener (this);
player.prefetch ();
}
public void controllerUpdate (ControllerEvent e)
{
// 调用player.close()时ControllerClosedEvent事件出现。
// 如果存在视觉部件,则该部件应该拆除(为一致起见,
// 我们对控制面板部件也执行同样的操作)
if (e instanceof ControllerClosedEvent)
{
if (vc != null)
{
remove (vc);
vc = null;
}
if (cc != null)
{
remove (cc);
cc = null;
}
return;
}
if (e instanceof EndOfMediaEvent)
{
if (loop)
{
player.setMediaTime (new Time (0));
player.start ();
}
return;
}
if (e instanceof PrefetchCompleteEvent)
{
player.start ();
return;
}
if (e instanceof RealizeCompleteEvent)
{
vc = player.getVisualComponent ();
if (vc != null)
add (vc);
cc = player.getControlPanelComponent ();
if (cc != null)
add (cc, BorderLayout.SOUTH);
pack ();
}
}
public void itemStateChanged (ItemEvent e)
{
loop = !loop;
}
public void paint (Graphics g)
{
if (first)
{
int w = getSize ().width;
int h = getSize ().height;
g.setColor (Color.blue);
g.fillRect (0, 0, w, h);
Font f = new Font ("DialogInput", Font.BOLD, 16);
g.setFont (f);
FontMetrics fm = g.getFontMetrics ();
int swidth = fm.stringWidth ("*** 欢迎 ***");
g.setColor (Color.white);
g.drawString ("*** 欢迎 ***",
(w - swidth) / 2,
(h + getInsets ().top) / 2);
}
// 调用超类Frame的paint()方法,该paint()方法将调用Frame包含的各个容器
// 和部件(包括控制面板部件)的paint()方法。
super.paint (g);
}
// 不执行背景清除操作,以免控制面板部件闪烁
public void update (Graphics g)
{
paint (g);
}
public static void main (String [] args)
{
new MediaPlayer ("媒体播放器1.0");
}
}
Java播放器
4星 · 超过85%的资源 需积分: 0 113 浏览量
更新于2008-05-15
1
收藏 2.12MB RAR 举报
Java播放器是一种基于Java语言开发的多媒体播放软件,它能够处理音频和视频文件。这个压缩包包含Java播放器的源代码,以及MediaPlayer类所依赖的两个关键库:jmf.jar和sound.jar。这两个库对于理解和实现Java中的多媒体播放功能至关重要。
1. **Java Media Framework (JMF)**
JMF(Java Media Framework)是Oracle公司提供的一个开源框架,用于在Java应用程序中处理多种媒体格式。它提供了一个接口来捕获、播放和操纵音频、视频数据。jmf.jar就是这个框架的库文件,开发者可以使用它来支持各种媒体格式,包括音频、视频和流媒体。JMF允许程序员创建复杂的多媒体应用,比如我们这里的Java播放器。
2. **Sound API**
sound.jar是Java Sound API的一个实现,它是Java标准版(Java SE)的一部分。Java Sound API提供了一组类和接口,使得开发者能够处理音频输入、输出、混音、采样率转换以及效果处理等功能。通过这个API,Java播放器可以播放、录制、混合音频,并且能够支持多种音频格式。
3. **MediaPlayer 类**
MediaPlayer是Java播放器中的核心组件,它可能封装了对JMF和Java Sound API的调用,负责实际的播放操作。这个类可能会有加载媒体文件、控制播放状态(播放、暂停、停止、快进、后退)、调整音量等方法。通过这个类,用户可以与播放器进行交互,控制媒体的播放。
4. **源码分析**
拥有源代码意味着你可以深入了解Java播放器的工作原理。源码通常包括媒体文件的解析逻辑、解码过程、事件处理以及用户界面的实现。通过阅读源码,开发者可以学习到如何使用JMF和Java Sound API来构建多媒体应用,也可以根据需求对其进行修改和扩展。
5. **开发与调试**
对于学习者或开发者来说,这个压缩包提供了一个实际的项目案例,可以在自己的环境中编译运行,体验Java多媒体播放器的实现过程。通过调试代码,可以发现和解决问题,理解多媒体处理的复杂性,提升编程技能。
6. **跨平台性**
由于Java的“一次编写,到处运行”特性,Java播放器可以在任何支持Java的平台上运行,这包括Windows、Linux、Mac OS等。这为开发者提供了极大的便利,无需为不同操作系统编写不同的播放器版本。
7. **拓展性与插件系统**
基于JMF的播放器往往具备良好的可扩展性,可以通过添加新的插件或组件来支持更多的媒体格式。开发者可以研究源码,了解如何构建这样的插件系统,以增强播放器的功能。
总结来说,这个Java播放器压缩包是一个学习和实践Java多媒体编程的好资源。它涵盖了从基本的音频播放到更复杂的媒体处理,涉及了JMF和Java Sound API的使用,同时也提供了源码供开发者深入研究。通过这个项目,开发者不仅可以提升Java编程能力,还可以掌握多媒体处理技术,为构建自己的多媒体应用打下坚实的基础。
xbc_888
- 粉丝: 1
- 资源: 3
最新资源
- wpsjs生成工资条成绩条.xlsm
- 基于COMSOL仿真的激光脉冲熔池模拟分析与优化研究,comsol 激光脉冲熔池 ,核心关键词:Comsol; 激光脉冲; 熔池; 数值模拟 ,激光脉冲熔池技术在comsol应用的研究
- STM32F103伺服驱动器量产方案:含原理图、PCB及源代码,支持多种运行模式和串口通信,附使用说明,STM32F103 量产伺服驱动器方案 1 Altiumn Dsigner硬件图纸,含主控板、驱
- 记录修改日志写入批注.xlsm
- 基于RBF径向神经网络的多输入单输出拟合预测建模:MATLAB程序详解与评价指标展示,基于RBF径向神经网络的多输入单输出的拟合预测建模 程序内注释详细,直接替数据就可以用,可以出真实值和预测值拟合
- 基于 DeepSeek 完成问答任务的 Python 源码
- MATLAB Simulink模块化控制学习:遗传PID、模糊PID、滑模控制与自抗扰ADRC等控制策略封装实战,Matlab simulink控制,遗传pid,模糊pid,滑模控制,自抗扰ADRC控
- Matlab在综合能源系统优化调度中的实战:涵盖热电厂、储能、风电光伏等机组的Cplex求解方案,Matlab,风光火储网综合能源系统优化调度 包括热电厂热电机组(11台,电出力上下限受热出力的影响
- python使用TensorFlow和Keras库构建一个卷积神经网络(CNN)进行图像识别
- 模糊PID与Carsim联合仿真优化ABS系统:控制滑移率,实现稳定高效制动,ABS 防抱死制动系统-模糊Pid Carsim与matlab simulink联合仿真,相较于单独使用simulin
- "直流配电网牛顿拉夫逊法潮流计算MATLAB程序详解:节点电压与支路功率分析",33节点直流配电网网牛顿拉夫逊法(牛拉法)潮流计算MATLAB程序,采用有名值计算,最后可以得出各节点电压和各支路功率
- 基于协同过滤算法的微信小程序文章推荐系统的设计与实现+Java、微信+微信文章推荐、文章管理
- 含光伏接入的14节点配网储能选址定容模型优化-基于改进粒子群算法的程序分析,含光伏的储能选址定容模型 14节点 程序采用改进粒子群算法,对分析14节点配网系统中的储能选址定容方案,并得到储能的出力情
- 基于MATLAB与YALMIP的含分布式与储能的微网优化调度模型,以15分钟为采集节点利用CPLEX求解算法,可靠实现发电机启停约束优化,微网优化调度matlab 采用matlab+yalmip编制含
- 信息融合项目MATLAB仿真:基于PDA与JPDA算法的杂波环境下多目标跟踪研究,信息融合项目matlab仿真代码及说明 针对杂波环境多目标跟踪问题,设计目标稀疏的目标运动场景,分别采用PDA和JPD
- 资源搬运:codeformer-stage2.pth,Jul 23, 2023
- 1
- 2
前往页