import java.awt.BorderLayout;
public class JMFMediaPlayer extends JFrame implements ActionListener,
ControllerListener, ItemListener {
// JMF的播放器
Player player;
// 播放器的视频组件和控制组件
Component vedioComponent;
Component controlComponent;
// 标示是否是第一次打开播放器
boolean first = true;
// 标示是否需要循环
boolean loop = false;
// 文件当前目录
String currentDirectory;
// 构造方法
public JMFMediaPlayer(String title) {
super(title);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
// 用户点击窗口系统菜单的关闭按钮
// 调用dispose以执行windowClosed
dispose();
}
public void windowClosed(WindowEvent e){
if (player != null){
// 关闭JMF播放器对象
player.close();
}
System.exit(0);
}
});
// 创建播放器的菜单
JMenu fileMenu = new JMenu("文件");
JMenuItem openMemuItem = new JMenuItem("打开");
openMemuItem.addActionListener(this);
fileMenu.add(openMemuItem);
// 添加一个分割条
fileMenu.addSeparator();
// 创建一个复选框菜单项
JCheckBoxMenuItem loopMenuItem = new JCheckBoxMenuItem("循环", false);
loopMenuItem.addItemListener(this);
fileMenu.add(loopMenuItem);
fileMenu.addSeparator();
JMenuItem exitMemuItem = new JMenuItem("退出");
exitMemuItem.addActionListener(this);
fileMenu.add(exitMemuItem);
JMenuBar menuBar = new JMenuBar();
menuBar.add(fileMenu);
this.setJMenuBar(menuBar);
this.setSize(500, 500);
this.setResizable(true);
try {
// 设置界面的外观,为系统外观
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
} catch (Exception e) {
e.printStackTrace();
}
this.setVisible(true);
}
/**
* 实现了ActionListener接口,处理组件的活动事件
*/
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("退出")) {
// 调用dispose以便执行windowClosed
dispose();
return;
}
FileDialog fileDialog = new FileDialog(this, "打开媒体文件", FileDialog.LOAD);
fileDialog.setDirectory(currentDirectory);
fileDialog.setVisible(true);
// 如果用户放弃选择文件,则返回
if (fileDialog.getFile() == null){
return;
}
currentDirectory = fileDialog.getDirectory();
if (player != null){
// 关闭已经存在JMF播放器对象
player.close();
}
try {
// 创建一个打开选择文件的播放器
player = Manager.createPlayer(new MediaLocator("file:"
+ fileDialog.getDirectory() + fileDialog.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;
this.setTitle(fileDialog.getFile());
// 播放器的控制事件处理
player.addControllerListener(this);
// 预读文件内容
player.prefetch();
}
/**
* 实现ControllerListener接口的方法,处理播放器的控制事件
*/
public void controllerUpdate(ControllerEvent e) {
// 调用player.close()时ControllerClosedEvent事件出现。
// 如果存在视觉部件,则该部件应该拆除(为一致起见,
// 我们对控制面板部件也执行同样的操作)
if (e instanceof ControllerClosedEvent) {
if (vedioComponent != null) {
this.getContentPane().remove(vedioComponent);
this.vedioComponent = null;
}
if (controlComponent != null) {
this.getContentPane().remove(controlComponent);
this.controlComponent = 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) {
vedioComponent = player.getVisualComponent();
if (vedioComponent != null){
this.getContentPane().add(vedioComponent);
}
controlComponent = player.getControlPanelComponent();
controlComponent.setSize(500,500);
if (controlComponent != null){
this.getContentPane().add(controlComponent, BorderLayout.SOUTH);
}
this.pack();
}
}
// 处理“循环”复选框菜单项的点击事件
public void itemStateChanged(ItemEvent e) {
loop = !loop;
}
public static void main(String[] args){
new JMFMediaPlayer("JMF媒体播放器");
}
}
分享到:
相关推荐
"JMF视频播放器 java源代码"是一个基于JMF实现的视频播放器实例,对于学习如何在Java中处理多媒体文件非常有帮助。 JMF的核心功能包括: 1. **多媒体支持**:JMF提供对多种音频和视频格式的支持,如MPEG、AVI、WAV...
【标题】基于JMF的播放器 多功能 源码 Java Media Framework(JMF)是Sun Microsystems公司推出的一个开源框架,用于处理多媒体数据,包括音频和视频。本项目提供了一个基于JMF的多媒体播放器源码,旨在实现与当今...
总之,这个基于JMF的MP3和视频播放器项目是一个很好的学习和实践Java多媒体编程的例子。通过深入研究源代码,开发者可以了解如何利用JMF进行媒体数据处理,以及如何构建跨平台的多媒体应用程序。同时,这个项目也...
Java JMF(Java Media Framework)音乐播放器是一个基于Java编程语言的多媒体应用程序,它利用了JMF库来处理音频和视频内容。Java JMF提供了一种标准的方式来集成、播放和控制多种媒体格式,使得开发者可以轻松地在...
通过JMF,开发者可以构建多媒体应用程序,如视频播放器、录音机、流媒体服务器等。 **核心组件与工作流程** 1. **捕获设备**: JMF支持多种输入设备,如摄像头、麦克风等,用于捕获音频和视频数据。 2. **媒体处理器...
标题提到的“JMF音乐播放器”是一个基于JMF框架开发的小型应用程序,能够播放如mp3、wav等常见音频格式的文件。 JMF的核心功能包括媒体的捕捉、处理、播放和控制。它支持多种媒体编码格式,例如MPEG(包括mp3)、...
**Java Media Framework (JMF) 是一种开源框架,专门用于处理多媒体内容,如音频和视频。在本项目中,"JMF版Java音乐播放器" 是一个基于Java Media Framework开发的音乐播放应用,旨在提供类似酷我音乐盒的用户体验...
Java Media Framework(JMF)是Java平台上用于处理多媒体数据的一个框架,它允许开发人员创建能够播放、捕获、处理和传输音频和视频的应用程序。在本案例中,"jmf播放器_java"是一个使用JMF库开发的小型媒体播放器,...
Java Media Framework(JMF)是Java平台上的多媒体处理框架,它为开发者提供了在Java应用程序中播放、捕获和操纵音频、视频流的能力。本项目“java编写的基于jmf的音乐播放器”利用了JMF的核心功能,实现了音乐播放...
创建一个简单的JMF视频播放器,你需要编写代码来初始化JMF,创建Player对象,加载媒体,设置渲染器,并处理播放控制。以下是一个简化的示例: ```java import javax.media.Manager; import javax.media....
### JMF多媒体播放器开发详解 #### 一、概述 JMF(Java Media Framework)是Sun Microsystems为Java平台提供的一套多媒体开发框架。通过JMF,开发者能够方便地实现音频和视频的播放功能。本文档将详细介绍如何使用...
JMF(Java Media Framework)流媒体播放器软件是一种基于Java技术的多媒体处理框架,主要用于处理音频、视频和动画等内容。这个软件在IT领域,尤其是开发P2P流媒体系统时,扮演着重要的角色。JMF为开发者提供了一个...
【基于JMF的MP3播放器】是一款利用Java Media Framework(JMF)技术开发的音频播放软件,专注于播放MP3格式的音乐文件。这个播放器不仅具备基础的播放功能,如播放、暂停、停止和音量控制,还支持列表播放,用户可以...
使用JMF实现java视频播放器 使用JMF实现java视频播放器是指使用Java Media Framework(JMF)开发一个Java视频播放器,能够播放各种格式的视频文件。JMF是一个多媒体开发框架,提供了一个统一的接口来处理多种媒体...
在这个“JMF播放器设计”的项目中,我们将深入探讨如何利用JMF来实现一个功能完备的媒体播放器,支持MP3音频和AVI视频格式的播放。 首先,我们要了解JMF的基本结构。JMF由两部分组成:核心组件和可插入组件。核心...
Java视频播放器源代码主要基于Java Media Framework (JMF),这是一个由Sun Microsystems开发的开源框架,专门用于处理多媒体数据,包括音频和视频的播放、捕获、编码和解码。JMF提供了一个灵活的平台,使得Java...
java视频播放器源代码是一个基于Java语言开发的简单视频播放器,该播放器使用Java Media Framework(JMF)来处理音频和视频流。下面我们将深入分析该源代码,了解其实现原理和关键技术点。 音频捕获设备初始化 在 ...
**基于JMF的简易播放器** Java Media Framework (JMF) 是Java平台上的一个多媒体处理框架,它允许开发者创建和播放各种音频、视频以及流媒体内容。本项目旨在利用JMF构建一个简单易用的播放器,具备播放音频和批量...
在本例中,JAVA 音频视频播放器很可能依赖JMF来解码和播放媒体文件。 MP3是一种广泛使用的有损音频压缩格式,它以较小的文件大小提供高质量的音频体验。JAVA 音频视频播放器支持MP3文件意味着它能够处理大量的音乐...