1: import java.awt.*;
2: import java.awt.event.*;
3: import java.net.*;
4: import javax.swing.*;
5: import java.io.*;
6:
7: import javax.media.*;
8: public class MediaPlayer extends JFrame implements ActionListener,ControllerListener,Runnable,ItemListener
9: {
10: Player player=null;
11: Thread thread;
12: File file,dir;
13: FileDialog fileDialog;
14: URL url;
15: boolean loop=false;
16: String filename[]={};
17: Menu playListMenu;
18: MenuItem openItem,exitItem,playItem,pauseItem,stopItem,playListItem;
19: CheckboxMenuItem circulateItem;
20:
21: // 构造函数,其中包括了设置响应窗口事件的监听器。
22: MediaPlayer(String title) {
23: super(title);
24: thread=new Thread(this);
25: // 关闭按钮的实现
26: addWindowListener(new WindowAdapter() {
27: public void windowClosing(WindowEvent e) {
28: dispose();
29: System.exit(0);
30: }
31: });
32: // 调用程序菜单栏的方法成员完成菜单的布置
33: setupMenu();
34: setSize(300, 300);
35: setBounds(300,300,300,80);
36: setResizable(false);
37: setVisible(true);
38: validate();
39: }
40: /**
41: * 本方法用以设置程序菜单栏
42: */
43: public void setupMenu() {
44: MenuBar menuBar = new MenuBar();
45: setMenuBar(menuBar);
46: //文件菜单
47: Menu fileMenu = new Menu("文件");
48: menuBar.add(fileMenu);
49: //打开按钮
50: openItem = new MenuItem("打开");
51: fileMenu.add(openItem);
52: openItem.addActionListener(this);
53: fileMenu.addSeparator();
54: //导入播放列表
55: playListItem=new MenuItem("播放列表");
56: playListItem.addActionListener(this);
57: fileMenu.add(playListItem);
58: fileMenu.addSeparator();
59: //退出按钮
60: exitItem = new MenuItem("退出");
61: exitItem.addActionListener(this);
62: fileMenu.add(exitItem);
63: fileMenu.addSeparator();
64: //播放控制菜单
65: Menu playControlMenu = new Menu("播放控制");
66: menuBar.add(playControlMenu);
67: //播放按钮
68: playItem = new MenuItem("播放");
69: playItem.addActionListener(this);
70: playControlMenu.add(playItem);
71: playControlMenu.addSeparator();
72: //暂停按钮
73: pauseItem = new MenuItem("暂停");
74: pauseItem.addActionListener(this);
75: playControlMenu.add(pauseItem);
76: playControlMenu.addSeparator();
77: //停止按钮
78: stopItem = new MenuItem("停止");
79: stopItem.addActionListener(this);
80: playControlMenu.add(stopItem);
81: playControlMenu.addSeparator();
82: //循环按钮
83: circulateItem = new CheckboxMenuItem("循环", false);
84: circulateItem.addActionListener(this);
85: playControlMenu.add(circulateItem);
86:
87: //播放列表
88: playListMenu = new Menu("播放列表");
89: menuBar.add(playListMenu);
90: }
91:
92: /**
93: * 动作时间响应成员
94: * 捕捉发送到本对象的各种事件
95: */
96: public void actionPerformed(ActionEvent e) {
97: // 调用dispose以便执行windowClosed
98: if (e.getSource()== exitItem){
99: dispose();
100: player.stop();
101: System.exit(0);
102: return;
103: }
104: //此事表明拥护选择了“播放”命令; 如果当前有一个文件可以播放则执行播放命令;
105: else if (e.getSource()==playItem) {
106: if (player != null)
107: player.start();
108: return;
109: }
110: // 如果当前正在播放某一文件,则执行暂停;
111: else if (e.getSource()==pauseItem) {
112: if (player != null)
113: player.stop();
114: return;
115: }
116: // 停止命令的响应,把时间进度条恢复到开始,并再次重新开始播放
117: else if (e.getSource()==stopItem) {
118: System.out.println("stopItem");
119: if (player != null) {
120: player.stop();
121: player.setMediaTime(new Time(0));
122: }
123: return;
124: }
125: // 用户选择要播放的媒体文件
126: else if (e.getSource()==openItem) {
127: System.out.println("打开按钮");
128: fileDialog=new FileDialog(this,"打开音乐文件",FileDialog.LOAD);
129: fileDialog.setVisible(true);
130: file=new File(fileDialog.getDirectory(),fileDialog.getFile());
131: if(file==null)
132: return;
133: if (player != null) {
134: System.out.println("无法创建播放器");
135: player.stop();
136: player.deallocate();
137: }
138: if(!(thread.isAlive()))
139: thread=new Thread(this);
140: try
141: {
142: thread.start();
143: } catch (Exception ex) {}
144: removeAll();
145: }
146: else if(e.getSource()==playListItem){
147: JFileChooser filechooser=new JFileChooser();
148: filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
149: filechooser.showOpenDialog(this);
150: if(filechooser.getSelectedFile()!=null){
151: dir=filechooser.getSelectedFile();
152: myFileFilter acceptedFile=new myFileFilter("mp3");
153: filename=dir.list(acceptedFile);
154: }
155: for(int i=0;i<filename.length;i++){
156: MenuItem item=new MenuItem(filename[i]);
157: item.addActionListener(this);
158: playListMenu.add(item);
159: }
160: }
161: else{
162: MenuItem tempItem=(MenuItem)e.getSource();
163: try{
164: File myFile=new File(dir,tempItem.getLabel());
165: System.out.println(tempItem.getLabel());
166: if(player!=null){
167: player.stop();
168: player.deallocate();
169: }
170: if(!(thread.isAlive()))
171: thread=new Thread(this);
172: try
173: {
174: thread.start();
175: }
176: catch(Exception e4) {}
177: removeAll();
178: player=Manager.createPlayer(new MediaLocator("file:"+myFile));
179: player.getDuration();
180: player.prefetch();
181: player.addControllerListener(this);
182: setTitle(myFile.getName());
183: }catch(Exception ex){}
184: }
185: }
186:
187: // 菜单状态改变事件的响应函数;
188: public void itemStateChanged(ItemEvent e) {
189: if(loop)
190: loop=false;
191: else
192: loop=true;
193: }
194: public synchronized void run()
195: {
196: try
197: {
198: System.out.println("Thread");
199: player=Manager.createPlayer(new MediaLocator("file:"+fileDialog.getDirectory()+fileDialog.getFile()));
200: player.getDuration();
201: player.prefetch();
202: player.addControllerListener(this);
203: setTitle(file.getName());
204: }
205: catch (IOException e3) {}
206: catch(NoPlayerException e2) {}
207: }
208:
209: public synchronized void controllerUpdate(ControllerEvent event) {
210: player.getDuration();
211: setBackground(Color.white);
212: Component visualComponent,controlComponent;
213: if(event instanceof RealizeCompleteEvent)
214: {
215: if((visualComponent=player.getVisualComponent())!=null)
216: add(visualComponent,BorderLayout.CENTER);
217: if((controlComponent=player.getControlPanelComponent())!=null)
218: if(visualComponent!=null)
219: add(controlComponent,BorderLayout.SOUTH);
220: else
221: add(controlComponent,BorderLayout.CENTER);
222: }
223: else if(event instanceof PrefetchCompleteEvent)
224: {
225: player.start();
226: }
227: else if(event instanceof EndOfMediaEvent)
228: {
229: player.setMediaTime(new Time(0));
230: if(loop)
231: player.start();
232: }
233: validate();
234: }
235:
236: class myFileFilter implements FilenameFilter
237: {
238: String str=null;
239: myFileFilter(String s)
240: {
241: str="."+s;
242: }
243: public boolean accept(File dir, String name) {
244: return name.endsWith(str);
245: }
246: }
247:
248: public static void main(String[] args) {
249: new MediaPlayer("MP3播放器");
250: }
251:
252: }
主要是抄别人的。