URL location = SPlayer.class.getResource("name.mp3"); //同目录下文件 MediaLocator mrl = new MediaLocator(location); Player player = Manager.createPlayer(mrl); player.start();
这个是JMF的播放视频的实例,但是你主机需要额外装JMF,对应安装包可以加我QQ 519582737给你,否则程序跑不起来 还有JMF这里还不支持AVI ,可以播放MEPG格式 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.FileDialog; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; 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;/** * 循环播放声音的实例 这个程序要正常播放还需要本机装有JMF,单纯有JMF的jar包发现确实是不行 * 这个例子还可以播放视频文件,已经播放过的有mpg格式 * @author ioe_gaoyong * */ public class MediaPlayer extends JFrame 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); } }); JMenu m = new JMenu("文件"); JMenuItem mi = new JMenuItem("打开"); mi.addActionListener(this); m.add(mi); m.addSeparator(); JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem("循环", false); cbmi.addItemListener(this); m.add(cbmi); m.addSeparator(); mi = new JMenuItem("退出"); mi.addActionListener(this); m.add(mi); JMenuBar mb = new JMenuBar(); mb.add(m); setJMenuBar(mb); setSize(200, 200); setVisible(true); } public void actionPerformed(ActionEvent e){ if (e.getActionCommand().equals("退出")) { // 调用dispose以便执行windowClosed dispose(); return; } // 利用FileDialog来帮助完成选择文件 // FileDialog貌似是平台相关的一个实现,是AWT的组件 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) { System.out.println("主程序抛出PrefetchCompleteEvent事件"); player.start(); System.out.println("这首歌时长" + player.getDuration().getSeconds() + "秒"); return; } if (e instanceof RealizeCompleteEvent){ System.out.println("主程序抛出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"); }}
http://beradrian.wordpress.com/2008/01/30/jmplayer/感谢gfw。
MediaLocator mrl = new MediaLocator(location);
Player player = Manager.createPlayer(mrl);
player.start();
还有JMF这里还不支持AVI ,可以播放MEPG格式
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
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;/**
* 循环播放声音的实例 这个程序要正常播放还需要本机装有JMF,单纯有JMF的jar包发现确实是不行
* 这个例子还可以播放视频文件,已经播放过的有mpg格式
* @author ioe_gaoyong
*
*/
public class MediaPlayer extends JFrame 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); } }); JMenu m = new JMenu("文件"); JMenuItem mi = new JMenuItem("打开"); mi.addActionListener(this); m.add(mi); m.addSeparator(); JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem("循环", false); cbmi.addItemListener(this); m.add(cbmi); m.addSeparator(); mi = new JMenuItem("退出"); mi.addActionListener(this); m.add(mi); JMenuBar mb = new JMenuBar(); mb.add(m); setJMenuBar(mb); setSize(200, 200); setVisible(true); } public void actionPerformed(ActionEvent e){ if (e.getActionCommand().equals("退出")) { // 调用dispose以便执行windowClosed dispose(); return; } // 利用FileDialog来帮助完成选择文件
// FileDialog貌似是平台相关的一个实现,是AWT的组件
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) {
System.out.println("主程序抛出PrefetchCompleteEvent事件");
player.start();
System.out.println("这首歌时长" + player.getDuration().getSeconds()
+ "秒"); return; } if (e instanceof RealizeCompleteEvent){
System.out.println("主程序抛出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"); }}
http://download.oracle.com/javafx/2.0/media/jfxpub-media.htm