📄 mediaplayer(java).txt
字号:
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 + -