//主类,主要用来调用
package com.gamvan.club.user2.login2.gamvan.mp3player;public class MainClass{

public static void main(String args[]){
MP3Events mp3Events = new MP3Events();
mp3Events.mainInit();
}}
//主要实现mp3的界面,初始化。
package com.gamvan.club.user2.login2.gamvan.mp3player;import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.*;
public class PanelLayout extends JFrame{
/**
 * 
 */
private static final long serialVersionUID = 1L;

//这是几个容器类
JMenuBar mainMenu = new JMenuBar();
Container container = new Container();
/////////////////////////////////////////////////
JMenuItem menuItem_1_1 = new JMenuItem("关于我们");
JMenuItem menuItem_1_2 = new JMenuItem("退出");

JMenuItem menuItem_2_1 = new JMenuItem("停止");
JMenuItem menuItem_2_2 = new JMenuItem("播放");
JMenuItem menuItem_2_3 = new JMenuItem("暂停");
JMenuItem menuItem_2_4 = new JMenuItem("上首");
JMenuItem menuItem_2_5 = new JMenuItem("下首");
JMenuItem menuItem_2_6 = new JMenuItem("下首");

JMenuItem menuItem_3_1 = new JMenuItem("打开");
JMenuItem menuItem_3_2 = new JMenuItem("添加文件");
JMenu menu_1 = new JMenu("今晚在线");
JMenu menu_2 = new JMenu("播放选项");
JMenu menu_3 = new JMenu("播放控制");
//初始化MP3Player界面

public void init(){
/////////////////////////////////////////
setTitle("今晚在线");
setSize(300,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setJMenuBar(mainMenu);
setVisible(true);
}
//初始化工具栏
public void toolbar(){
JToolBar toolBar = new JToolBar();
JToolBar toolBar_2 = new JToolBar();
JScrollBar scrollBar = new JScrollBar(JScrollBar.HORIZONTAL);
JComboBox comboBox = new JComboBox();
JLabel statusLabel = new JLabel("次序  ");
container = getContentPane();
container.add(toolBar,BorderLayout.NORTH);
container.add(toolBar_2,BorderLayout.SOUTH);
toolBar_2.add(scrollBar);
toolBar.add(comboBox, new FlowLayout());
toolBar.add(statusLabel,FlowLayout.LEFT);

comboBox.addItem("循环");
comboBox.addItem("循环一首");
comboBox.addItem("随机");
}
// 初始化菜单

public void menu(){
///////////////////
//向菜单Menu中添加菜单项
menu_1.add(menuItem_1_1);
menu_1.add(menuItem_1_2);


menu_2.add(menuItem_2_1);
menu_2.add(menuItem_2_2);
menu_2.add(menuItem_2_3);
menu_2.add(menuItem_2_4);
menu_2.add(menuItem_2_6);
menu_2.add(menuItem_2_6);

menu_3.add(menuItem_3_1);
menu_3.add(menuItem_3_2);

//向主菜单中添加菜单
mainMenu.add(menu_1);
mainMenu.add(menu_2);
mainMenu.add(menu_3);
////////////////////////////////////////////
}
}
//事件类,主要实现菜单的事件,同时这个类继承了前一个类PanelLayout。进行初始化界面
//监听类和事件源捕捉注册监听器
package com.gamvan.club.user2.login2.gamvan.mp3player;import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.Player;
import javax.media.PrefetchCompleteEvent;
import javax.media.RealizeCompleteEvent;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;public class MP3Events extends PanelLayout implements ActionListener,
ControllerListener  {

/**
 * 
 */
private static final long serialVersionUID = 1L;
//注册事件源监听器
JList itemList = new JList();

Player player;
Component visualMedia;
Component mediaControl;
URL fileURLs;
File mediaFiles;
public MP3Events(){
menuItem_1_1.addActionListener(this);
menuItem_1_2.addActionListener(this);
menuItem_3_1.addActionListener(this);
menuItem_2_2.addActionListener(this);
}
//调用界面初始化函数
public void mainInit(){
init();
toolbar();
menu();
container.add(itemList,BorderLayout.CENTER);
} public void actionPerformed(ActionEvent arg0) {
JFileChooser fileChooser = new JFileChooser();
JLabel messageLabel = new JLabel("本软件由今晚在线工作室制作!  " +
"  欢迎访问我们的网站,www.gamvan.com");
if(arg0.getSource() == menuItem_1_2)
System.exit(0);
else if(arg0.getSource() == menuItem_1_1)
JOptionPane.showMessageDialog(null, messageLabel,
"系统信息", JOptionPane.INFORMATION_MESSAGE);
else if(arg0.getSource()==menuItem_3_1){
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
int result = fileChooser.showOpenDialog(MP3Events.this);
if(result == JFileChooser.APPROVE_OPTION){
mediaFiles = fileChooser.getSelectedFile();

}

if(mediaFiles != null){
try{
fileURLs = mediaFiles.toURL();
}catch(MalformedURLException ex){
ex.printStackTrace(); //输出错误信息
}
startPlayer(fileURLs.toString());
}//end if
}
Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, Boolean.TRUE);
}//end actionPerformed

public void startPlayer(String address){
if(player != null)
// 如果播放器非空则移去先前的播放器组件
if(visualMedia != null)
container.remove(visualMedia);
// 如果视频播放控制组件非空则移去播放控制组件
if(mediaControl != null){
container.remove(mediaControl);
player.close();
}
// 媒体定位器
MediaLocator mediaLocator = new MediaLocator(address);

if (mediaLocator == null) {
 //显示错误信息
JOptionPane.showMessageDialog(this, "打开文件错误!");
return;
}
try{
// 得到播放器实例
player = Manager.createPlayer(mediaLocator);
player.addControllerListener((ControllerListener)this);
player.realize();

}catch(Exception ex){
ex.printStackTrace();
JOptionPane.showMessageDialog(this, "打开文件错误!");
}
}
public void controllerUpdate(ControllerEvent ce){
if(ce instanceof RealizeCompleteEvent){
player.prefetch();
System.out.print(5);
}else if(ce instanceof PrefetchCompleteEvent){
if(visualMedia != null)
return;
}
getMediaComponents();
player.start();
}
//取得媒体播放组件
public void getMediaComponents(){
System.out.print(5);
//取得视频组件
visualMedia = player.getVisualComponent();
//如果visualMedia非空则加入到窗口窗格
if(visualMedia != null){
container.add(visualMedia,BorderLayout.CENTER);
pack();
}
//取得播放控制组件
mediaControl = player.getControlPanelComponent();
//如果mediacontrol非空则加入到窗口窗格
if(mediaControl != null)
container.add(mediaControl,BorderLayout.SOUTH);
System.out.print("已经执行到这里了");
}}//请高手指教

解决方案 »

  1.   

    忘记说了,问题出在player.realize();这句,就是在运行了程序之后想打开一首mp3播放时所报的错~~~
    javax.media.NotRealizedError: Cannot get visual component from an unrealized player.
    at com.sun.media.content.video.mpeg.Handler.getVisualComponent(Handler.java:79)
    at com.gamvan.club.user2.login2.gamvan.mp3player.MP3Events.getMediaComponents(MP3Events.java:126)
    at com.gamvan.club.user2.login2.gamvan.mp3player.MP3Events.controllerUpdate(MP3Events.java:119)
    at com.sun.media.BasicController.dispatchEvent(BasicController.java:1254)
    at com.sun.media.SendEventQueue.processEvent(BasicController.java:1286)
    at com.sun.media.util.ThreadedEventQueue.dispatchEvents(ThreadedEventQueue.java:65)
    at com.sun.media.util.ThreadedEventQueue.run(ThreadedEventQueue.java:92)
      

  2.   

    :)再补几句,这个使用sun的jmf写的。也就是jmf2.1.1;要去下载的。