师兄写的一个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<indexForDel)
   list.setSelectedValue(numList.elementAt(index),true);
   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<sFiles.length;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<ss.length;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"));
      }
    }*/
 
 
}

posted on 2006-02-19 00:32 samuel's blog 阅读(22484) 评论(43) 编辑 收藏

评论

#1楼[楼主] 2006-02-19 00:34samuel's blog

DialogDemo.java
-----------------------------------------------------------------------
//软件简介框
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);
}


}

#2楼[楼主] 2006-02-19 00:34samuel's blog

ListValues.java
------------------------------------------------------------------------------
//列表文件要用的对象
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[匿名]

把JMF安装上

#7楼 2006-12-13 17:10betty[匿名]

非常感谢你!

#8楼 2006-12-14 15:17

太长了有没比叫短的啊

#9楼 2007-03-31 15:48369945969

private Player 错误

#10楼 2007-04-19 17:18eecomes

我将上面的eclipse环境里,发现一下几句有问题:
(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

哦,我知道了,是缺少一个jmf包,需要到http://java.sun.com/products/java-media/jmf/index.jsp
下载到这个包,并把它安装起来,就可以了。(程序全部正确)

#12楼 2007-05-12 17:44lxhfyly

怎么我拿去运行得起,但就是播放不起,只有界面

#13楼 2007-05-14 13:55lxhfyly

我用Eclipse运行编译通过就是运行不行,总是报下面的错,不知道怎么回事,能否帮我解答下啊,Unable to handle format: mpeglayer3, 44100.0 Hz, 16-bit, Stereo, LittleEndian, Signed, 16000.0 frame rate, FrameSize=32768 bits
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

C:\java.java:4: package javax.media does not exist
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欲竖邻疯

#17楼 2007-12-15 16:32sszy

请问大家有谁把这个程序运行出来的``麻烦各位能不能把调好了的程序发一遍给我```感激不尽``我 QQ 312619570

#18楼 2008-01-05 10:35liutb

太感谢这样的师兄了,,,,,,,
我将那三个类合起来,可以直接播放。。。。

#19楼 2008-01-21 12:34蓦然回首

output.flush();
output.close();//郁闷,这两行不能写在这里,实在是一大遗憾啊,不知道有什么别的方法

改为:
try{output.flush();
output.close();
}catch(IOException e){

}
因为这两句会抛出IOException 必须处理

#20楼 2008-01-25 10:21132

我用的 怎么也是有问题 呀
那 个jmf包也下了

#21楼 2008-01-25 10:31xiexienidedaima

麻烦大家
能不能把 调好的 程序给我发以下
我的 邮箱
citybeijing2008@163.com

#22楼 2008-04-16 10:12ffgfgfg

太强了

#23楼 2008-04-28 08:14visioniceman

太感谢了。能用了

#24楼 2008-05-29 19:36麦峰升

能不能把 调好的 程序给我发以下
我的 邮箱
mai.fengsheng@163.com
谢谢了

#25楼 2008-05-29 19:38麦峰升

在其他地方下的JMF也可以用吗?

#26楼 2008-09-05 10:47EggKiller

调试成功,正在学习java,收藏了,谢谢!

#27楼 2008-10-07 20:36javalover

好像能播放mp3格式的文件

#28楼 2008-11-08 13:39bart

Cannot get visual component on an unrealized player

#29楼 2008-11-25 17:00fff

很多错误啊

#30楼 2008-11-26 14:14muzixinly

我的也有好多错误啊 有谁调好的 请也给我发一份
我的邮箱:muzixinly@163.com
谢谢啊 !!!

#31楼 2008-11-27 11:56lianghongwei

能把调好的发一份给我吗?感谢!
我的邮箱:lhwzht@yahoo.com.cn

#32楼 2008-12-11 12:50SDFF

我把上面那些代码全部搞好没有错误就是不能播放啊 我也下载了Jmf就是不能播放 ,总出现界面. 有谁能把调好的发我下撒 谢谢

#33楼 2009-01-07 11:08tigerBIAO

哪些注释用不用去掉?

#34楼 2009-01-12 21:10blueglas

能把调好的发一份给我吗?感谢!
blueglas@tom.com

#35楼 2009-03-12 08:54hanandy

给我也发一份吧,谢谢!!!!!!!

#36楼 2009-03-12 08:55hanandy

忘记写邮箱了

jefferhan@163.com

非常感谢!!!

#37楼 2009-08-12 22:32cainwise

能不能把可以播放的发到我的邮箱哈

#38楼 2009-08-12 22:33cainwise

我的邮箱是cainwises@gmail.com

#39楼 2009-09-21 11:36gjj

能不能把调整好的代码发我邮箱 谢谢了 邮箱是:261902287@qq.com

#40楼 2010-11-23 00:31气死你

能不能把调整好的代码发我邮箱 谢谢了 邮箱是:649212857@qq.com  

#41楼 2011-05-13 00:20xiaolid

没有错误,可以运行,但是当打开文件播放的时候出现了以下错误Failed to configure: com.sun.media.PlaybackEngine@1546e25
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)
有没有人有调试好的,请发到我邮箱:1406681203@qq.com
非常感谢

#42楼 2012-05-25 17:472365

求代码
制作一个音频文件播放器,能够播放多种音频格式的文件。
功能
(1) 实现为Applet小程序
(2) 实现开始、暂停、停止等播放控制
(3) 维护一个或多个播放列表
(4) 能够从Internet下载歌曲并播放

#43楼23859032012/5/25 17:48:26 2012-05-25 17:482365

如果师兄帮忙写的话,麻烦发到593443911@qq.com
注册用户登录后才能发表评论,请 登录注册访问网站首页。

补充:需要下载JMF API包。

最新文章

  1. 51nod1135(求最小原根)
  2. 查看特性Attribute数据
  3. java从控制台读取数据的方式
  4. callback调用测试
  5. JDK1.5新特性(三)&hellip;&hellip;Varargs
  6. 综合使用LruCache和DiskLruCache 缓存图片
  7. php中的一些编程例子
  8. bat(批处理)命令(tomcat 7.0.75 startup.bat 命令集)
  9. sql server error 53
  10. 【lintcode】二分法总结 II
  11. 百度编辑器 UEditor setContent()
  12. Docker报错总结
  13. IE6条件下的bug与常见的bug及其解决方法
  14. python3 session cookie
  15. 把javabean复制到另一个javabean 使用BeanUtils.copyProperties(a,b) 复制
  16. stm32 优先级说明
  17. 2018牛客网暑期ACM多校训练营(第五场) E - room - [最小费用最大流模板题]
  18. QtPropertyBrowser+vs2010的安装与配置
  19. python拼接字符串
  20. consul 小結

热门文章

  1. JVM常见垃圾回收算法
  2. JavaScript一个函数式编程-------求标准差
  3. 开发servlet三种方式
  4. 3,Spring Boot热部署
  5. Xamarin Android绑定微信SDK
  6. nopCommerce 3.9 大波浪系列 之 引擎 NopEngine
  7. sed的粉丝
  8. 51nod_1120:机器人走方格 V3
  9. [luogu P1967][NOIp2013] 货车运输
  10. 修改User-Agent来伪装浏览器访问手机站点