⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mediaplayer.java

📁 一个小的播放器 大家可以参考一下 呵呵 这里还用到了一个其他的插件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
 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);
   setTitle(title);
   
  }
  catch(Exception e)
  {
   JOptionPane.showMessageDialog(this,extendName,"出错了!!",JOptionPane.ERROR_MESSAGE);
   setTitle(extendName);
  } 
 }
 
 private void closePreviosPlayer()//把先前打开的播放器关闭
 {
  if(player==null)
  return;
  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)//如果图象存在则去掉以前的图象加载当前图象
    {
        panel.removeAll();
        panel.add(visual,BorderLayout.CENTER);
    }
    Component control=player.getControlPanelComponent();//是一个操作时间轴的可视组件(包括开始,停止,回放),
                                           //也包含了一些媒体流的有用信息
    
    if(control!=null)
    {
     panel.add(control,BorderLayout.SOUTH);
    }
    panel.doLayout();//提示布局管理器布局此组件,否则布局的位置不正确
    return;
   }
   
   if (e instanceof EndOfMediaEvent) //如果到达了文件尾则进行如下事件
            { 
                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)); //将时间返回开始的0时刻然后播放
                    player.start();  
                } 
                createPlayer2();
                
      }
     }
 }
 private void exity_n()//退出操作,先保存列表,然后退出
 {
  saveList();
  System.exit(0);
  
 }
 //清单改变一次就重新载入一次
  private void addList(String vf)//像播放清单中增加选项
 {
   fileName.addElement(vf);
   numList.addElement((numList.size()+1)+"."+vf);
   dirName.addElement(title);
   list.setListData(numList);
 }
 private void createPlayer2()//创建一个player对象并使其播放
//当双击鼠标时会播放鼠标击中的歌曲,并且不会出现能播放的格式也播放不了,在刷新文件后(即双击鼠标时更换播放曲目时)使用
 {
  
  try{
  	title=dirName.elementAt(index).toString();//将当前目录名设为title
  }
  catch(ArrayIndexOutOfBoundsException e)//如果数组越界则返回
  {return;}
  file=new File(title);//以title为名创建一个file实例,下面将file转换为URL用来创建player对象
  closePreviosPlayer();//关闭先前的媒体播放器
  String extendName="此播放器不支持"+title.substring(title.lastIndexOf(".")+1)+"格式";
  try
  {
   player=Manager.createPlayer(file.toURL());//javax.media.Manager直接继承于java.lang.object,且它为final,不能被继承                                     //Manager用来创建Player对象
   player.addControllerListener(new ControllerHand());
   player.start();//设置为开始播放
   list.setSelectedValue(numList.elementAt(index),true);//将当前所在 的位置在list中置为选中项
   setTitle(title); //名称为当前目录名称
  }
  catch(Exception e)//若出现不能播放的格式,则将该文件从播放列表中删除,并且给出相应的提示信息
  {
   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(numList);
  JOptionPane.showMessageDialog(this,"已经从播放列表中删除 "+"\""+ex+"\""+" 文件,"
   +"因为此播放器不支持"+ex.substring(ex.lastIndexOf(".")+1)+"格式","出错了!!!",JOptionPane.ERROR_MESSAGE);
  }
  
 }
 

  private void saveList()//将播放列表保存到list中使下次执行是在上一次执行的基础上
 {//Enumeration接口在包java.util 中
  //它生成一系列元素,一次生成一个,
   //连续调用nextElement方法将返回一系列的连续元素  
  Enumeration enumFile=fileName.elements();
  Enumeration enumDir =dirName.elements();
  try
  {
   output=new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(listFile)));
   while(enumFile.hasMoreElements())//如果enumFile中有元素则写入文件中
   {//将文件名与目录都保存在ListValues对象中最终实现保存在文件中
    listWriteFile=new ListValues(enumFile.nextElement().toString(),enumDir.nextElement().toString());
    output.writeObject(listWriteFile);//将对象写入文件中
   }
   output.flush();
   output.close();
   
  }
  catch(Exception e)
  {
   e.printStackTrace();
  }
  
 }

 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)//循环将歌曲对象加入到播放列表中
   {//ListValues类实现了接口Serializable 
    listWriteFile=(ListValues)input.readObject();//将对象读入到listWriteFile类对象中
    fileName.addElement(listWriteFile.getFileName());//将文件对象名加入文件名向量中
    numList.addElement((numList.size()+1)+"."+listWriteFile.getFileName());//将文件对象加入清单并
                                                               //实现加入的对象从1一直向下排序
    dirName.addElement(listWriteFile.getDirName());//将目录名加入到目录向量中
       
   }
  }
  catch(EOFException e)
  {
   try
   {
    if(!fileName.isEmpty())
    {
    	 input.close();//确认有元素存在并加载完毕后关闭输入流
    }
   
   }
   catch(IOException e1)
   {
    JOptionPane.showMessageDialog(this,"文件被非正常关闭",
    "非法关闭",JOptionPane.ERROR_MESSAGE);
   }
   
  }
  catch(ClassNotFoundException e)
  {
   JOptionPane.showMessageDialog(this,"不能创建对象","对象创建失败",JOptionPane.ERROR_MESSAGE);
  }
  catch(IOException e)
  {
   JOptionPane.showMessageDialog(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中用以后面进行保存   
   createPlayer2();
  }
  
 }
 private void checkMenu(MouseEvent e)//标志选中项
 {
  
  if(e.isPopupTrigger())//判断是否要求弹出一个菜单 
  {
   indexForDel=list.locationToIndex(e.getPoint());//获取当前鼠标点使下标转换为用户选中的文件
   int[] selected={index,indexForDel};//建立选中数组并赋值
   
   list.setSelectedIndices(selected);//选择索引数组中指定的项目,并更新列表框
   popupMenu.show(list,e.getX(),e.getY());//在相对于初始组件list的 x、y 位置显示弹出式菜单
   
  }
 }
 String reNames() 
 {
  String name=JOptionPane.showInputDialog(this,"请输入新的名字",fileName.elementAt(indexForDel));
  return name;
 }
 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -