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"); 
} }