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

📄 mediaplayer(java).txt

📁 MediaPlayer代码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
   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 Brest-ZONE 阅读(567) 评论(5)  编辑 收藏 引用 网摘 
 
Feedback
# re: 师兄写的一个JAVA播放器的源代码 2006-02-19 00:34 Brest-ZONE 
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); 
} 


}  回复  更多评论 
   


# re: 师兄写的一个JAVA播放器的源代码 2006-02-19 00:34 Brest-ZONE 
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; 
} 
}

⌨️ 快捷键说明

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