java jmf实现本地视频播放_Java的JMF实现视频播放器
java本地视频播放器
str;
Thread mythread;
Choice choice;
Component visualCompoment,controlCompoment,progressBar;
String mediaFile;
URL mediaURL,codeBase;
Frame frame;
public void init()
{
str='music.MPE';
mythread=new Thread(this);
choice=new Choice();
choice.add('music01.MPG');
choice.add('music02.avi');
choice.add('music03.avi');
choice.addItemListener(this);
frame=new Frame('Movie System');
frame.setSize(640,480);
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
if(player!=null)
{
player.stop();
player.deallocate();
}
frame.setVisible(false);
System.exit(0);
}
});
add(choice);
}
public void stop()
{
if(player!=null)
{
player.stop();
}
}
public synchronized void controllerUpdate(ControllerEventevent)
{
player.getDuration();
if(event instanceof RealizeCompleteEvent)
{
if((visualCompoment=player.getVisualComponent())!=null)
{
frame.add('Center',visualCompoment);
}
if((controlCompoment=player.getControlPanelComponent())!=null)
if(visualCompoment!=null)
frame.add('South',controlCompoment);
else
frame.add('Center',controlCompoment);
frame.validate();
frame.pack();
}
else if(event instanceof PrefetchCompleteEvent)
{
player.start();
}
}
public void itemStateChanged(ItemEvent e)
{
str=choice.getSelectedItem();
if(player==null) {}
else
{
player.stop();
player.deallocate();
}
frame.removeAll();
frame.setVisible(true);
frame.setBounds(300,100,150,100);
frame.validate();
if(!(mythread.isAlive()))
{
mythread=new Thread(this);
}
try{
mythread.start();
}
catch(Exception ee) {}
}
public synchronized void run()
{
try{
mediaURL=new URL(codeBase,str);
player=Manager.createPlayer(mediaURL);
player.getDuration();
if(player!=null)
{
player.addControllerListener(this);
}
else
{
System.out.println('failed to creat player for'+mediaURL);
}
}
catch(MalformedURLException e)
{
System.out.println('URL for'+mediaFile+'is invalid');
}
catch(IOException e)
{
System.out.println('URL for'+mediaFile+'is invalid');
}
catch(NoPlayerException e)
{
System.out.println('Can't find a player'+mediaURL);
}
if(player!=null)
{
player.prefetch();
}
}
}
下面是另外一个视频播放器程序:
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FileDialog;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.ControllerClosedEvent;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.EndOfMediaEvent;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.media.Time;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
public class JMFMediaPlayer extends JFrame implementsActionListener,
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();
// 创建一个复选框菜单项
terminaltypeoptionhandler ttopt = new terminaltypeoptionhandler(termtype, false, false, true, false)。 subject sub = new subject(false, princ, new hashset(), new hashset())。 //每次加上new会循环这个加上的new,进入循环又会加一个new。
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(200, 200);
try {
// 设置界面的外观,为系统外观
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
} catch (Exception e) {
e.printStackTrace();
}
this.setVisible(true);
}
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播放器对象
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-97007-1.html
java jmf实现本地视频播放_Java的JMF实现视频播放器相关推荐
- java 监听本地端口_JAVA本地监听与远程端口扫描
摘 要 随着Internet的不断发展,信息技术已成为社会进步的巨大推动力.不管是存储于服务器里还是流通于Internet上的信息都已成为一个关系事业成败的关键,这就使保证信息的安全变得格外重要.本地 ...
- java读取安卓本地文件_Java Android 二进制文件读写
1.读取android工程中本地二进制文件 Android studio工程目录中有二进制文件abcd.raw . 二进制文件所放目录 app/src/main/assets/abcd.raw 1.1 ...
- java代码删除本地文件_java程序实现删除本地文件
import java.io.File; public class Test { public static void main(String args[]) { Test t = new Test( ...
- java的对象对象映射_Java对象到对象映射器
java的对象对象映射 我在该项目上使用了Dozer一段时间. 但是,最近我遇到了一个非常有趣的错误,这促使我环顾四周,并尝试使用其他"对象到对象"映射器. 这是我找到的工具列表: ...
- java 线程加载类_java JVM-线程上下类加载器
public class One { public static void main(String[] args) throws Exception { ClassLoader loader=One. ...
- JAVA单选组监听_java – 如何将侦听器附加到单选按钮
我有一个显示各种radiobutton的活动.无线电按钮分组在无线电组中.我希望在检查某个单选按钮时,一些radiobutton会消失.例如,当检查事故按钮时,摔倒,绊倒和疾病的无线电按钮消失.我怎么 ...
- java本地缓存_java缓存——(五)LocalCache本地缓存分享
LocalCache本地缓存分享 前言 一.本地缓存应用场景 二.java本地缓存标准 三.java开源缓存框架 四.LocalCache实现 结束语 前言 本次分享探讨java平台的本地缓存,是指占 ...
- [zz] 深入java虚拟机之本地方法
[zz] 深入java虚拟机之本地方法 转自:http://blog.csdn.net/sunxiaosunxiao/article/details/6829899 本地方法就是直接和硬件打交道的一个 ...
- java调节音量代码_用Java调用VC音量控制程序_java
前言 本文通过java的Runtime接口来实现调用其他语言实现的应用程序,进而来实现对计算机硬件信息的监控和控制.本文是多媒体信息系统的一个部分,就是调整计算机音量. 使用VC编写音量控制程序 本控 ...
最新文章
- java if 没有_java – 如何做一个决定没有if语句
- linux 分区表dd,dd复制分区后目标分区的大小变成原分区了
- hdu-3944 DP?
- 【Java】 5.9 初始化块
- 游历校园 [COGS 614] [欧拉图]
- golang中的go mod开发
- java nio proactor_reactor模式与java nio
- JoinGroup的过程
- 张俊红22岁年度总结
- python怎么让输出的数字右对齐_python(格式化输出)
- hbase shell 查看列名_hbase shell 常用命令
- 小学奥数 7651 自来水供给 python
- golang 一段代码不甚明白
- 微课|《Python编程基础与案例集锦(中学版)》第2章(1)
- 通用权限管理平台--数据模型定义
- redis数据类型 - Hash类型
- jdbc:initialize-database标签的研究
- 111... 南邮NOJ 1079
- 【5G通信】基于matlab 5G通信新型多载波技术GFDM【含Matlab源码 106期】
- 关于小波分解的滤波器理解
热门文章
- 用户画像第一章(企业级360°全方位用户画像_环境搭建)
- 8Manage PPM,助力北京测威提升项目运营效益
- MacOS Catalina Beta使用体验
- vFlat Scan – 可能是最快捷的纸质书扫描应用,一次 2页,居然还能移除手指头[iOS/Android]
- Redis-14Redis超时命令
- 陆游和辛弃疾都是南宋主战爱国的大才子,而且生活在同一个时代,有没有交集?
- Java输出英语字母对应的数字
- Google的通用翻译机能成为未来的巴别鱼吗?
- 公司技术分享-全文技术分享Lucene VS ElasticSearch VS Solr
- 电子物流中的EDI 应用