import java.awt.*;
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.*;
import javax.swing.*;/**
* 用java的JMF实现一个媒体播放器,可以播放音频和视频
*/public class JMFMediaPlayer extends JFrame implements ActionListener,ControllerListener,ItemListener{ Player player;//JMF的播放器
//播放器控制的视频组件和控制组件
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){
player.close();//关闭jmf播放器对象
}
System.exit(0);
}
});
//创建播放器菜单
JMenu fileMenu=new JMenu("文件");
JMenuItem openMenuItem=new JMenuItem("打开");
openMenuItem.addActionListener(this);
fileMenu.add(openMenuItem);
fileMenu.addSeparator();//添加分割条
//创建一个复选框菜单项
JCheckBoxMenuItem loopMenuItem=new JCheckBoxMenuItem("循环",false);
loopMenuItem.addItemListener(this);
fileMenu.add(loopMenuItem);
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 static void main(String[] args) {
new JMFMediaPlayer("JMF媒体播放器");
}
//实现了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){
player.close();//关闭已经存在的jmf播放器对象
}
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()时controllerCloseEvent事件出现,如果存在
//视觉组件,则该组件应该拆除
if(e instanceof ControllerClosedEvent){
if(vedioComponent !=null){
this.getContentPane().remove(vedioComponent);
this.controlComponent=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();
if(controlComponent !=null){
this.getContentPane().add(controlComponent,BorderLayout.SOUTH);
}
this.pack();
}
} public void itemStateChanged(ItemEvent e) {
loop=!loop;
}
}
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.*;
import javax.swing.*;/**
* 用java的JMF实现一个媒体播放器,可以播放音频和视频
*/public class JMFMediaPlayer extends JFrame implements ActionListener,ControllerListener,ItemListener{ Player player;//JMF的播放器
//播放器控制的视频组件和控制组件
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){
player.close();//关闭jmf播放器对象
}
System.exit(0);
}
});
//创建播放器菜单
JMenu fileMenu=new JMenu("文件");
JMenuItem openMenuItem=new JMenuItem("打开");
openMenuItem.addActionListener(this);
fileMenu.add(openMenuItem);
fileMenu.addSeparator();//添加分割条
//创建一个复选框菜单项
JCheckBoxMenuItem loopMenuItem=new JCheckBoxMenuItem("循环",false);
loopMenuItem.addItemListener(this);
fileMenu.add(loopMenuItem);
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 static void main(String[] args) {
new JMFMediaPlayer("JMF媒体播放器");
}
//实现了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){
player.close();//关闭已经存在的jmf播放器对象
}
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()时controllerCloseEvent事件出现,如果存在
//视觉组件,则该组件应该拆除
if(e instanceof ControllerClosedEvent){
if(vedioComponent !=null){
this.getContentPane().remove(vedioComponent);
this.controlComponent=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();
if(controlComponent !=null){
this.getContentPane().add(controlComponent,BorderLayout.SOUTH);
}
this.pack();
}
} public void itemStateChanged(ItemEvent e) {
loop=!loop;
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货