师兄写的一个JAVA播放器的源代码
MediaPlayer.java
----------------------------------------------------------------------------
//程序主文件
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.media.*;
import java.io.*;
import java.util.*;//为了导入Vector
//import com.sun.java.swing.plaf.windows.*;
public class MediaPlayer extends JFrame implements ActionListener,Runnable
{
private JMenuBar bar;//菜单条
private JMenu fileMenu,choiceMenu,aboutMenu;
private JMenuItem openItem,openDirItem,closeItem,about,infor;
private JCheckBoxMenuItem onTop;
private boolean top=false,loop;//设定窗口是否在最前面
private Player player;//Play是个实现Controller的接口
private File file,listFile;//利用File类结合JFileChooser进行文件打开操作,后则与list.ini有关
private Container c;
//private UIManager.LookAndFeelInfo[] look;
private String title,listIniAddress;//标题
private FileDialog fd;
private JPanel panel,panelSouth;
private Icon icon; //开始进入的时候要显示的图标,它为抽象类,不能自己创建
private JLabel label,listB;//用来显示图标
private JList list;//播放清单
private JScrollPane scroll;//使播放清单具有滚动功能
private ListValues listWriteFile;//用于向文件中读取对象
private ObjectInputStream input;//对象输入流
private ObjectOutputStream output;//对象输出流
private JPopupMenu popupMenu;//鼠标右键弹出菜单
private JMenuItem del,delAll,reName; //弹出菜单显示的菜单项,包括删除,全部删除和重命名
private Vector fileName,dirName,numList;
private String files,dir;
private int index;//曲目指针
private Properties prop;//获得系统属性
private int indexForDel;//标志要删除的列表项目的索引
private ButtonGroup buttonGroup;//控制按钮组
private JRadioButtonMenuItem[] buttonValues;
private String[] content={"随机播放","顺序播放","单曲循环"};
private DialogDemo dialog1;
//private JDialogTest dialog2;//用于显示播放清单
MediaPlayer()//构造函数
{
super("java音频播放器1.1版");//窗口标题
c=getContentPane();
c.setLayout(new BorderLayout());
//c.setBackground(new Color(40,40,95));
fileName=new Vector(1);
dirName=new Vector(1);
numList=new Vector(1);//构造三个容器用于支持播放清单
//vectorToString=new String[];
//prop=new Properties(System.getProperties());
//listIniAddress=prop.getProperty("user.dir")+"\\list.ini";
//listFile=new File(listIniAddress);//本来这些代码用来取的系统属性,后来
//发现根本就不用这么麻烦
listFile=new File("list.ini");//直接存于此目录
Thread readToList=new Thread(this);//注意编线程程序的时候要注意运行的时候含有的变量亿定义或者初始化,
//这就要求线程要等上述所说的情况下再运行,否则很容易发生错误或则异常
list=new JList();
list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
list.setSelectionForeground(new Color(0,150,150));
list.setVisibleRowCount(10);
list.setFixedCellHeight(12);
list.setFixedCellWidth(250);
list.setFont(new Font("Serif",Font.PLAIN,12));
list.setBackground(new Color(40,40,95));
list.setForeground(new Color(0,128,255));
//list.setOpaque(false);
list.setToolTipText("点右键显示更多功能");//创建播放清单并设置各个属性
list.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
if (e.getClickCount() == 2) //判断是否双击
{
index = list.locationToIndex(e.getPoint());//将鼠标坐标转化成list中的选项指针
createPlayer2();
//System.out.println("Double clicked on Item " + index);,此是测试的时候加的
}
}
/* public void mousePressed(MouseEvent e)
{
checkMenu(e);//自定义函数,判断是否是右键,来决定是否显示菜单
}*/
public void mouseReleased(MouseEvent e)
{
checkMenu(e);//与上面的一样,判断是否鼠标右键
}
}
);
//listB=new JLabel(new ImageIcon("qingdan.gif"),SwingConstants.CENTER);
scroll=new JScrollPane(list);//用于存放播放列表
//dialog2=new JDialogTest(MediaPlayer.this,"播放清单",scroll);
//dialog2.setVisible(true);
readToList.start();//启动先程,加载播放列表
try
{
Thread.sleep(10);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
/*look=UIManager.getInstalledLookAndFeels();
try
{
UIManager.setLookAndFeel(look[2].getClassName());
SwingUtilities.updateComponentTreeUI(this);
}
catch(Exception e)
{
e.printStackTrace();
}*///与下面的代码实现相同的功能,但执行速度要慢,原因:明显转了个大弯
/*try
{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e)
{
e.printStackTrace();
} *///此段代码使执行速度大大降低
bar=new JMenuBar();
setJMenuBar(bar);//此两行创建菜单栏并放到此窗口程序
//bar.setBackground(new Color(48,91,183));
fileMenu=new JMenu("文件");
bar.add(fileMenu);
choiceMenu=new JMenu("控制");
bar.add(choiceMenu);
aboutMenu=new JMenu("帮助");
bar.add(aboutMenu);
openItem =new JMenuItem("打开文件");
openDirItem =new JMenuItem("打开目录");
closeItem =new JMenuItem("退出程序");
openItem.addActionListener(this);
openDirItem.addActionListener(this);
closeItem.addActionListener(this);
fileMenu.add(openItem);
fileMenu.add(openDirItem);
fileMenu.add(closeItem);
onTop=new JCheckBoxMenuItem("播放时位于最前面",top);
choiceMenu.add(onTop);
onTop.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
if(onTop.isSelected())
top=true;
else top=false;
setAlwaysOnTop(top);
}
}
);
choiceMenu.addSeparator();//加分割符号
buttonGroup=new ButtonGroup();
buttonValues=new JRadioButtonMenuItem[3];
for(int bt=0;bt<3;bt++)
{
buttonValues[bt]=new JRadioButtonMenuItem(content[bt]);
buttonGroup.add(buttonValues[bt]);
choiceMenu.add(buttonValues[bt]);
}
buttonValues[0].setSelected(true);
choiceMenu.addSeparator();
/*loopItem=new JCheckBoxMenuItem("是否循环");
choiceMenu.add(loopItem);
loopItem.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
loop=!loop;
}
}
);*/
infor=new JMenuItem("软件简介");
aboutMenu.add(infor);
infor.addActionListener(this);
about=new JMenuItem("关于作者");
about.addActionListener(this);
aboutMenu.add(about);
//菜单栏设置完毕
panel=new JPanel();
panel.setLayout(new BorderLayout());
c.add(panel,BorderLayout.CENTER);
panelSouth=new JPanel();
panelSouth.setLayout(new BorderLayout());
c.add(panelSouth,BorderLayout.SOUTH);
icon=new ImageIcon("icon\\Player.jpg");
label=new JLabel(icon);
panel.add(label);
popupMenu=new JPopupMenu();
del =new JMenuItem("删除");//鼠标右键弹出菜单对象实例化
popupMenu.add(del);
del.addActionListener(this);
delAll =new JMenuItem("全部删除");
popupMenu.add(delAll);
delAll.addActionListener(this);
reName =new JMenuItem("重命名");
popupMenu.add(reName);
reName.addActionListener(this);
scroll=new JScrollPane(list);//用于存放播放列表
listB=new JLabel(new ImageIcon("icon\\qingdan.gif"),SwingConstants.CENTER);
panelSouth.add(listB,BorderLayout.NORTH);
panelSouth.add(scroll,BorderLayout.CENTER);
dialog1=new DialogDemo(MediaPlayer.this,"软件说明");
this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);//设定窗口关闭方式
//this.setTitle("d");编译通过,说明可以再次设定标题
this.setLocation(400,250);//设定窗口出现的位置
//this.setSize(350,320);//窗口大小
setSize(350,330);
this.setResizable(false);//设置播放器不能随便调大小
this.setVisible(true);//此句不可少,否则窗口会不显示
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==openItem)//getSource()判断发生时间的组键
{
//System.out.println("d");测试用
openFile();
//createPlayer();
//setTitle(title);
}
if(e.getSource()==openDirItem)//打开目录
{
openDir();
}
if(e.getSource()==closeItem)//推出播放器
{
exity_n();
//System.exit(0);
}
if(e.getSource()==about)
{
JOptionPane.showMessageDialog(this,"此简易播放器由计科0302\n"
+"harly\n "+" 完成 ",
"参与者",
JOptionPane.INFORMATION_MESSAGE);
}
if(e.getSource()==del)
{
//index
//delPaintList(index);
fileName.removeElementAt(indexForDel);
dirName.removeElementAt(indexForDel);
numList.removeAllElements();//从三个容器里面移除此项
Enumeration enumFile=fileName.elements();
while(enumFile.hasMoreElements())
{
numList.addElement((numList.size()+1)+"."+enumFile.nextElement());
//numList添加元素,显示播放里表中
}
//list.setListData(fileName);
list.setListData(numList);
if(index
else
{
if(index==indexForDel);
else
if(index!=0)
list.setSelectedValue(numList.elementAt(index-1),true);
}
//list.setSelectedIndex(index);
}
if(e.getSource()==delAll)//全部删除
{
fileName.removeAllElements();
dirName.removeAllElements();
numList.removeAllElements();
list.setListData(numList);
}
if(e.getSource()==reName)//重命名
{
String name;//=JOptionPane.showInputDialog(this,"请输入新的名字");
try
{
name=reNames();
fileName.setElementAt(name,indexForDel);
numList.setElementAt((indexForDel+1)+"."+name,indexForDel);
}
catch(ReName e2)//自定义的异常
{
}
}
if(e.getSource()==infor)
{
dialog1.setVisible(true);
}
}
public static void main(String[] args)
{
final MediaPlayer mp=new MediaPlayer();
mp.setIconImage(new ImageIcon("icon\\mPlayer.jpg").getImage());//改变默认图标
mp.addWindowListener(new WindowAdapter()//注册窗口事件
{
public void windowClosing(WindowEvent e)
{
//System.exit(0);
mp.exity_n();
}
}
);
System.out.println("注意:更新文件列表后,请先正常关闭播放器"
+"\n然后再关闭此DOS窗口,否则导致播放列表不能保存!!");
}
private void openFile()//为了界面原因,此代码重写,估计兼容性不好了
{
/*JFileChooser fileChooser=new JFileChooser();//文件选择器
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);//可以选择文件不能目录
int result=fileChooser.showOpenDialog(this);//创建文件打开对话框,并设定此程序为父窗口监控*/
/*通过result的值来判断文件是否打开成功
*JFileChooser类有很多静态成员变量
**/
/*if(result==JFileChooser.CANCEL_OPTION)
{
file=null;//file已经在类中定义,如果选择取消,file指向为空
}
else
{
file=fileChooser.getSelectedFile();//获得文件对象
title=file.getAbsolutePath();//取得文件的绝对路径并且赋给title设定标题
}*/
//if(fd==null)
//{
//String filename="java音频播放器";
fd = new FileDialog(MediaPlayer.this);
//Filters fl=new Filters();
//fd.setFilenameFilter(fl);
fd.setVisible(true);
if (fd.getFile() != null)
{
title = fd.getDirectory() + fd.getFile();//原因请见同目录下的FileDialogDemo.java文件
files=fd.getFile();
//dir =fd.getDirectory();
file=new File(title);
createPlayer();
}
//title=filename;
//fd=null;//缺少此句如果第一次打开文件的时候取消操作的时候第二次也不能打开文件了
//}
}
private void openDir()
{
JFileChooser fileChooser=new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int result=fileChooser.showOpenDialog(MediaPlayer.this);
if(result==JFileChooser.CANCEL_OPTION)
return;
file=fileChooser.getSelectedFile();
if(file==null||file.getName().equals(""))
JOptionPane.showMessageDialog(this,"错误的路径",
"出错了",JOptionPane.ERROR_MESSAGE);
String[] sFiles=file.list();
for(int i=0;i
fileName.addElement(sFiles[i]);
numList.addElement((numList.size()+1)+"."+sFiles[i]);
dirName.addElement(file.getAbsolutePath()+"\\"+sFiles[i]);
}
list.setListData(numList);
/*fd=new FileDialog(MediaPlayer.this);
fd.setVisible(true);
if(fd.getDirectory()!=null)
{
File fileDir=new File(fd.getDirectory());
String[] ss=fileDir.list();
for(int i=0;i
System.out.println(ss[i]);
}
}*/
}
private void createPlayer()
{
closePreviosPlayer();//关闭先前的媒体播放器
String extendName="此播放器好象不支持"+title.substring(title.lastIndexOf(".")+1)+"格式";
try
{
player=Manager.createPlayer(file.toURL());//javax.media.Manager直接继承于java.lang.object,且它为final,不能被继承
player.addControllerListener(new ControllerHand());
player.start();
addList(files);
index=fileName.size()-1;
list.setSelectedValue(numList.elementAt(index),true);
//list.setSelectedIndex(index);
//list.setSelectionForeground(Color.blue);
setTitle(title);
//addList("files");//到播放清单
//title="file.getAbsoluteFile()";
}
catch(Exception e)
{
JOptionPane.showMessageDialog(this,extendName,"出错了!!",JOptionPane.ERROR_MESSAGE);
setTitle(extendName);
}
}
private void closePreviosPlayer()
{
if(player==null)
return;
//player.close();//首先停止播放
/*
*不能用上面的代码停止,要用下面的两行取代,否则Component visual =player.getVisualComponent();发生异常
**/
player.stop();
player.deallocate(); //停止播放并且重新装载DateSource
Component visual =player.getVisualComponent();
Component control=player.getControlPanelComponent();
if(visual!=null)
{
panel.remove(visual);
}
if(control!=null)
{
panel.remove(control);
}
}
private class ControllerHand implements ControllerListener
{
public void controllerUpdate(ControllerEvent e)
{
if(e instanceof RealizeCompleteEvent)
{
Component visual=player.getVisualComponent();
if(visual!=null)
{
//System.out.println("音频播放器不支持视频图象功能");
//setTitle("音频播放器不支持视频图象功能");
panel.removeAll();
panel.add(visual,BorderLayout.CENTER);
}
else
{
panel.add(label,BorderLayout.CENTER);
}///此else语句可以防止因为原来播放视频图象后以后没有界面
Component control=player.getControlPanelComponent();
if(control!=null)
{
panel.add(control,BorderLayout.SOUTH);
}
//c.validate();
panel.doLayout();
return;
}
if (e instanceof EndOfMediaEvent)
{
/*if (loop)
{
player.setMediaTime (new Time (0));
player.start ();
}
return;*/
if(buttonValues[0].isSelected())
{
if(fileName.size()==0)
return;
index=(int)(Math.random()*fileName.size());
}
if(buttonValues[1].isSelected())
{
if(fileName.size()==0)
return;//必须有此if语句,否则当用户把播放列表清空的时候发生异常,偶然的机会发现的
//现在感觉测试软件真是太重要了,看来以后程序做好后要反复测试,考虑各种情况
index=(index+1)%fileName.size();
}
if(buttonValues[2].isSelected())
{
player.setMediaTime (new Time (0));
player.start();
}
createPlayer2();
}
}
}
private void exity_n()
{
/*int exi;
exi=JOptionPane.showConfirmDialog(this,"真的要离开么?","退出程序",JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
//if(exi==null)
if(exi==JOptionPane.YES_OPTION)
{
saveList();
System.exit(0);
}
return;*/
saveList();
System.exit(0);
}
private void addList(String vf)
{
//fileReadList=new fileReadList(fdd,)
//try
//{
//int i=0;
//fileName.addElement((fileName.size()+1)+"."+vf);
fileName.addElement(vf);
numList.addElement((numList.size()+1)+"."+vf);
//fileName.addElement(++i+"."+vf);
dirName.addElement(title);
list.setListData(numList);
//}
/*catch(Exception e)
{
e.printStackTrace();
//System.out.println(e.getMessage());
}*/
}
private void createPlayer2()
{
try{title=dirName.elementAt(index).toString();}
//title=dirName.elementAt(index).toString();
catch(ArrayIndexOutOfBoundsException e)
{return;}
file=new File(title);
closePreviosPlayer();//关闭先前的媒体播放器
String extendName="此播放器好象不支持"+title.substring(title.lastIndexOf(".")+1)+"格式";
try
{
player=Manager.createPlayer(file.toURL());//javax.media.Manager直接继承于java.lang.object,且它为final,不能被继承
player.addControllerListener(new ControllerHand());
player.start();
//list.setSelectedIndex(index);
list.setSelectedValue(numList.elementAt(index),true);
//list.setSelectionForeground(Color.blue);
//list.setSelectedIndex(index);
//addList(files);
setTitle(title);
//addList("files");//到播放清单
}
catch(Exception e)
{
//JOptionPane.showMessageDialog(this,extendName,"出错了!!",JOptionPane.ERROR_MESSAGE);
//setTitle(extendName);
String ex=null;
try{ex=fileName.elementAt(index).toString();
}
catch(Exception e1){return;}
fileName.removeElementAt(index);
numList.removeAllElements();
Enumeration enumFile=fileName.elements();
while(enumFile.hasMoreElements())
{
numList.addElement((numList.size()+1)+"."+enumFile.nextElement());
}
dirName.removeElementAt(index);
//list.setListData(fileName);
list.setListData(numList);
System.out.println("已经从播放列表中删除 "+"\""+ex+"\""+" 文件,"
+"因为此播放器不支持"+ex.substring(ex.lastIndexOf(".")+1)+"格式,"
+"不过没有从硬盘真正删除");
if(numList.size()!=0)
{
index%=numList.size();
createPlayer2();
}
}
}
private void saveList()
{
Enumeration enumFile=fileName.elements();
Enumeration enumDir =dirName.elements();
try
{
output=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(listFile)));
while(enumFile.hasMoreElements())
{
listWriteFile=new ListValues(enumFile.nextElement().toString(),enumDir.nextElement().toString());
output.writeObject(listWriteFile);
}
output.flush();
output.close();
}
catch(Exception e)
{
e.printStackTrace();
}
/*finally
{
output.flush();
output.close();//郁闷,这两行不能写在这里,实在是一大遗憾啊,不知道有什么别的方法
}*/
}
public void run()
{
try
{
Thread.sleep(1);
}
catch(InterruptedException e)
{
}
try
{
if(!listFile.exists())
{
listFile.createNewFile();//防止不存在此文件发生读取错误,这两行代码保证不存在的情况下自动建立
return;
}
input=new ObjectInputStream(new BufferedInputStream(new FileInputStream(listFile)));
while(true)
{
listWriteFile=(ListValues)input.readObject();
fileName.addElement(listWriteFile.getFileName());
numList.addElement((numList.size()+1)+"."+listWriteFile.getFileName());
dirName.addElement(listWriteFile.getDirName());
}
}
catch(EOFException e)
{
try
{
//if(!fileName.isEmpty())
input.close();//确认有元素存在并加载完毕后关闭输入流
}
catch(IOException e1)
{
JOptionPane.showMessageDialog(MediaPlayer.this,"文件被非正常关闭",
"非法关闭",JOptionPane.ERROR_MESSAGE);
}
}
catch(ClassNotFoundException e)
{
JOptionPane.showMessageDialog(MediaPlayer.this,"不能创建对象","对象创建失败",JOptionPane.ERROR_MESSAGE);
}
catch(IOException e)
{
JOptionPane.showMessageDialog(MediaPlayer.this,"不能读取文件",
"读取文件失败",JOptionPane.ERROR_MESSAGE);
}
finally
{
try
{
if(input!=null)
input.close();
}
catch(IOException e)
{
}
if(dirName.isEmpty())//防止Vector越界
{
return;
}
index=(int)(Math.random()*(fileName.size()));//产生随即数,进行随即播放
list.setListData(numList);
//list.setListData(fileName);
//list.setSelectedValue(fileName.elementAt(index),true);
//list.ensureIndexIsVisible(index);//确保选择项可以看见
//list.setSelectionForeground(Color.green);
createPlayer2();
}
}
private void checkMenu(MouseEvent e)
{
if(e.isPopupTrigger())
{
indexForDel=list.locationToIndex(e.getPoint());
int[] selected={index,indexForDel};
//Point p=new Point(e.getX(),e.getY());
list.setSelectedIndices(selected);
popupMenu.show(list,e.getX(),e.getY());
}
//list.setSelectedIndex(index);
}
String reNames() throws ReName//文件该名函数
{
String name=JOptionPane.showInputDialog(this,"请输入新的名字",fileName.elementAt(indexForDel));
if(name==null||name.equals("")) throw new ReName();
//必须把name==null放在前面,否则会发生NullPointerExceptin,这个很好理解,
//当我们按了取消后,name会成为空,那么name.equals("")就会发生异常
return name;
}
class ReName extends Exception//自定义异常来处理文件该名的时候发生输入为空的情形
{
}
/*class Filters implements FilenameFilter
{
public boolean accept(File dir,String name)
{
return (name.endsWith(".exe"));
}
}*/
}
» 下一篇: 觉得我的BLOG“好像”冷了哦!
posted on 2006-02-19 00:32 samuel's blog 阅读(22484) 评论(43) 编辑 收藏
评论
#1楼[楼主] 2006-02-19 00:34samuel's blog
#2楼[楼主] 2006-02-19 00:34samuel's blog
------------------------------------------------------------------------------
//列表文件要用的对象
import java.io.Serializable;
class ListValues implements Serializable
{
private String fileName;
private String dirFileName;
ListValues()
{
setFileName("歌曲名字");
setDirFileName("E:\\歌曲名字");
}
ListValues(String fileNameC,String dirFileNameC)
{
setFileName(fileNameC);
setDirFileName(dirFileNameC);
}
void setFileName(String fileNameC)
{
fileName=fileNameC;
}
void setDirFileName(String dirFileNameC)
{
dirFileName=dirFileNameC;
}
String getFileName()
{
return fileName;
}
String getDirName()
{
return dirFileName;
}
}
#3楼 2006-05-21 17:14df
#4楼 2006-05-21 17:15df
#5楼 2006-05-24 21:38mx
#6楼 2006-11-26 00:41ll[匿名]
#7楼 2006-12-13 17:10betty[匿名]
#8楼 2006-12-14 15:17的
#9楼 2007-03-31 15:48369945969
#10楼 2007-04-19 17:18eecomes
(1) import javax.media.*;
(2) private Player player;//Play是个实现Controller的接口
(3) player=Manager.createPlayer(file.toURL())
(4) private class ControllerHand implements ControllerListener
(5) if(e instanceof RealizeCompleteEvent)
(6) if (e instanceof EndOfMediaEvent)
对于第(1)句:显示找不到media.*
对于第(2)句:显示Player can not be resolved to a type
对于第(3)句:Multiple markers at this line
-the method toURL()from the type File is deprecated
-player cannot be resolved
-Manager cannot be resolved
对于第(4)句:Contronller cannot be resolved to a type
对于第(5)句:RealizeCompleteEvent cannot be resolved to a type
对于第(6)句:EndOfMediaEvent cannot be resolved to a type
谁能告诉我怎回事吗
#11楼 2007-04-19 19:33eecomes
下载到这个包,并把它安装起来,就可以了。(程序全部正确)
#12楼 2007-05-12 17:44lxhfyly
#13楼 2007-05-14 13:55lxhfyly
Failed to realize: com.sun.media.PlaybackEngine@b23210
Error: Unable to realize com.sun.media.PlaybackEngine@b23210
javax.media.NotRealizedError: Cannot get visual component on an unrealized player
at com.sun.media.BasicPlayer.getVisualComponent(BasicPlayer.java:491)
at com.sun.media.MediaPlayer.getVisualComponent(MediaPlayer.java:48)
at cn.edu.cqnu.MediaPlayer.closePreviosPlayer(MediaPlayer.java:488)
at cn.edu.cqnu.MediaPlayer.createPlayer2(MediaPlayer.java:615)
at cn.edu.cqnu.MediaPlayer$1.mouseClicked(MediaPlayer.java:102)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)
at java.awt.Component.processMouseEvent(Component.java:5491)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1778)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Exception in thread "AWT-EventQueue-0" javax.media.NotRealizedError: Cannot get visual component on an unrealized player
at com.sun.media.BasicPlayer.getVisualComponent(BasicPlayer.java:491)
at com.sun.media.MediaPlayer.getVisualComponent(MediaPlayer.java:48)
at cn.edu.cqnu.MediaPlayer.closePreviosPlayer(MediaPlayer.java:488)
at cn.edu.cqnu.MediaPlayer.createPlayer2(MediaPlayer.java:615)
at cn.edu.cqnu.MediaPlayer$1.mouseClicked(MediaPlayer.java:102)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:212)
at java.awt.Component.processMouseEvent(Component.java:5491)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3901)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1778)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
#14楼 2007-05-23 22:00莫名
#15楼 2007-06-16 09:13jishizaijian
import javax.media.*;
^
C:\java.java:16: cannot find symbol
symbol : class Player
location: class MediaPlayer
private Player player;//Play是个实现Controller的接口
^
C:\java.java:28: cannot find symbol
symbol : class ListValues
location: class MediaPlayer
private ListValues listWriteFile;//用于向文件中读取对象
^
C:\java.java:44: cannot find symbol
symbol : class DialogDemo
location: class MediaPlayer
private DialogDemo dialog1;
^
C:\java.java:488: cannot find symbol
symbol : class ControllerListener
location: class MediaPlayer
private class ControllerHand implements ControllerListener
^
C:\java.java:490: cannot find symbol
symbol : class ControllerEvent
location: class MediaPlayer.ControllerHand
public void controllerUpdate(ControllerEvent e)
^
C:\java.java:245: cannot find symbol
symbol : class DialogDemo
location: class MediaPlayer
dialog1=new DialogDemo(MediaPlayer.this,"软件说明");
^
C:\java.java:437: cannot find symbol
symbol : variable Manager
location: class MediaPlayer
player=Manager.createPlayer(file.toURL());//javax.media.Manager直接继承于java.lang.object,且它为final,不能被继承
^
C:\java.java:492: cannot find symbol
symbol : class RealizeCompleteEvent
location: class MediaPlayer.ControllerHand
if(e instanceof RealizeCompleteEvent)
^
C:\java.java:524: cannot find symbol
symbol : class EndOfMediaEvent
location: class MediaPlayer.ControllerHand
if (e instanceof EndOfMediaEvent)
^
C:\java.java:547: cannot find symbol
symbol : class Time
location: class MediaPlayer.ControllerHand
player.setMediaTime (new Time (0));
^
C:\java.java:605: cannot find symbol
symbol : variable Manager
location: class MediaPlayer
player=Manager.createPlayer(file.toURL());//javax.media.Manager直接继承于java.lang.object,且它为final,不能被继承
^
C:\java.java:661: cannot find symbol
symbol : class ListValues
location: class MediaPlayer
listWriteFile=new ListValues(enumFile.nextElement().toString(),enumDir.nextElement().toString());
^
C:\java.java:701: cannot find symbol
symbol : class ListValues
location: class MediaPlayer
listWriteFile=(ListValues)input.readObject();
^
Note: C:\java.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
14 errors
能帮我改一下吗?
#16楼 2007-09-05 13:45欲竖邻疯
http://192.18.108.218/ECom/EComTicketServlet/BEGIN7B2CB2F9EDB24373BD70C455826AE34C/-2147483648/2330661915/1/371954/371942/2330661915/2ts+/westCoastFSEND/7372-jmf-2.1.1e-oth-JPR/7372-jmf-2.1.1e-oth-JPR:4/jmf-2_1_1e-windows-i586.exe
#17楼 2007-12-15 16:32sszy
#18楼 2008-01-05 10:35liutb
我将那三个类合起来,可以直接播放。。。。
#19楼 2008-01-21 12:34蓦然回首
output.close();//郁闷,这两行不能写在这里,实在是一大遗憾啊,不知道有什么别的方法
改为:
try{output.flush();
output.close();
}catch(IOException e){
}
因为这两句会抛出IOException 必须处理
#20楼 2008-01-25 10:21132
那 个jmf包也下了
#21楼 2008-01-25 10:31xiexienidedaima
#22楼 2008-04-16 10:12ffgfgfg
#23楼 2008-04-28 08:14visioniceman
#24楼 2008-05-29 19:36麦峰升
#25楼 2008-05-29 19:38麦峰升
#26楼 2008-09-05 10:47EggKiller
#27楼 2008-10-07 20:36javalover
#28楼 2008-11-08 13:39bart
#29楼 2008-11-25 17:00fff
#30楼 2008-11-26 14:14muzixinly
#31楼 2008-11-27 11:56lianghongwei
我的邮箱:[email protected]
#32楼 2008-12-11 12:50SDFF
#33楼 2009-01-07 11:08tigerBIAO
#34楼 2009-01-12 21:10blueglas
#35楼 2009-03-12 08:54hanandy
#36楼 2009-03-12 08:55hanandy
#37楼 2009-08-12 22:32cainwise
#38楼 2009-08-12 22:33cainwise
#39楼 2009-09-21 11:36gjj
#40楼 2010-11-23 00:31气死你
#41楼 2011-05-13 00:20xiaolid
Bad header in the media: WAVE Parser: expected magic string RIFF, got ID3
Error: Unable to realize com.sun.media.PlaybackEngine@1546e25
javax.media.NotRealizedError: Cannot get visual component on an unrealized player
at com.sun.media.BasicPlayer.getVisualComponent(BasicPlayer.java:491)
at com.sun.media.MediaPlayer.getVisualComponent(MediaPlayer.java:48)
at com.cmu.ui.MediaPlayer.closePreviosPlayer(MediaPlayer.java:481)
at com.cmu.ui.MediaPlayer.createPlayer(MediaPlayer.java:440)
at com.cmu.ui.MediaPlayer.openFile(MediaPlayer.java:397)
at com.cmu.ui.MediaPlayer.actionPerformed(MediaPlayer.java:270)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1220)
有没有人有调试好的,请发到我邮箱:[email protected]
非常感谢
#42楼 2012-05-25 17:472365
制作一个音频文件播放器,能够播放多种音频格式的文件。
功能
(1) 实现为Applet小程序
(2) 实现开始、暂停、停止等播放控制
(3) 维护一个或多个播放列表
(4) 能够从Internet下载歌曲并播放
#43楼23859032012/5/25 17:48:26 2012-05-25 17:482365
· 扎克伯格和妻子捐赠百万美元 颁发助学奖学金
· 阿里发布智能音箱“天猫精灵” 瞄准客厅生活场景
· 李彦宏乘无人驾驶汽车上五环|北京交警:已介入调查
· 英国成立专项基金打造极速全光纤宽带网络 网速可达1Gbps
· 探访乐视总部:门口躺满了讨债人 乐视生态旗舰店大门紧闭
» 更多新闻...
· 程序员的工作、学习与绩效
· 软件开发为什么很难
· 唱吧DevOps的落地,微服务CI/CD的范本技术解读
· 程序员,如何从平庸走向理想?
补充:需要下载JMF API包。
-----------------------------------------------------------------------
//软件简介框
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class DialogDemo extends JDialog
{
JTextArea field;
Container c;
String sValue= "\n本软件基于java media framework构建,同时我们"
+"\n正处于基础java学习阶段,所以功能还不是非常完"
+"\n善,难登大雅之堂。"
+"\n\n\t功能简介:"
+"\n本软件的播放清单文件保存在同目录下的"+"\""+"list.ini"
+"\""+"文件"+"\n下,如果系统不存在此文件则第一次打开的时候软件"
+"\n会自动建立。本软件能打开单个音乐文件或整个音乐"
+"\n目录,清单支持右键操作,当在列表中读取到不支持的"
+"\n文件时,此软件会自动把那个文件从清单清除,并另"
+"\n外播放一首歌。不过此软件有个不足之处,就是当你更"
+"\n改了清单的时候,要正常退出,即先关闭播放器,然后"
+"\n再关闭DOS窗口,因为我是在关闭播放器的时候保存清单"
+"\n文件的。不过你运行我编译出来的jar文件就没有此问题"
+"\n如果你使用中遇到任何问题,请通知我们,谢谢你的支持";
DialogDemo(Frame frame,String title)
{
super(frame,title);
field=new JTextArea();
field.setText(sValue);
field.setEditable(false);
c=getContentPane();
c.setLayout(new BorderLayout());
c.add(field,BorderLayout.CENTER);//默认为BorderLayout布局
setLocation(80,250);
setSize(300,350);
setResizable(false);
//setVisible(true);
}
}