热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java编写视频播放器_求Java编写的视频播放器程序

展开全部不全~代码发不了了~,剩下的是播放器的关闭以及播放格式的支持与否,不麻烦的自己写吧MediaPlayer.java-----------------------------

展开全部

不全~代码发不了了~,剩下的是播放器的关闭以及播放格式的支持与否,不麻烦的自己写吧

MediaPlayer.java

----------------------------------------------------------------------------

//程序e68a8462616964757a686964616f31333335333139主文件

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&#61;0;bt<3;bt&#43;&#43;)

{

buttonValues[bt]&#61;new JRadioButtonMenuItem(content[bt]);

buttonGroup.add(buttonValues[bt]);

choiceMenu.add(buttonValues[bt]);

}

buttonValues[0].setSelected(true);

choiceMenu.addSeparator();

/*loopItem&#61;new JCheckBoxMenuItem("是否循环");

choiceMenu.add(loopItem);

loopItem.addItemListener(new ItemListener()

{

public void itemStateChanged(ItemEvent e)

{

loop&#61;!loop;

}

}

);*/

infor&#61;new JMenuItem("软件简介");

aboutMenu.add(infor);

infor.addActionListener(this);

about&#61;new JMenuItem("关于作者");

about.addActionListener(this);

aboutMenu.add(about);

//菜单栏设置完毕

panel&#61;new JPanel();

panel.setLayout(new BorderLayout());

c.add(panel,BorderLayout.CENTER);

panelSouth&#61;new JPanel();

panelSouth.setLayout(new BorderLayout());

c.add(panelSouth,BorderLayout.SOUTH);

icon&#61;new ImageIcon("icon\\Player.jpg");

label&#61;new JLabel(icon);

panel.add(label);

popupMenu&#61;new JPopupMenu();

del &#61;new JMenuItem("删除");//鼠标右键弹出菜单对象实例化

popupMenu.add(del);

del.addActionListener(this);

delAll &#61;new JMenuItem("全部删除");

popupMenu.add(delAll);

delAll.addActionListener(this);

reName &#61;new JMenuItem("重命名");

popupMenu.add(reName);

reName.addActionListener(this);

scroll&#61;new JScrollPane(list);//用于存放播放列表

listB&#61;new JLabel(new ImageIcon("icon\\qingdan.gif"),SwingConstants.CENTER);

panelSouth.add(listB,BorderLayout.NORTH);

panelSouth.add(scroll,BorderLayout.CENTER);

dialog1&#61;new DialogDemo(MediaPlayer.this,"软件说明");

this.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);//设定窗口关闭方式

//this.setTitle("d");编译通过&#xff0c;说明可以再次设定标题

this.setLocation(400,250);//设定窗口出现的位置

//this.setSize(350,320);//窗口大小

setSize(350,330);

this.setResizable(false);//设置播放器不能随便调大小

this.setVisible(true);//此句不可少&#xff0c;否则窗口会不显示

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()&#61;&#61;openItem)//getSource()判断发生时间的组键

{

//System.out.println("d");测试用

openFile();

//createPlayer();

//setTitle(title);

}

if(e.getSource()&#61;&#61;openDirItem)//打开目录

{

openDir();

}

if(e.getSource()&#61;&#61;closeItem)//推出播放器

{

exity_n();

//System.exit(0);

}

if(e.getSource()&#61;&#61;about)

{

JOptionPane.showMessageDialog(this,"此简易播放器由计科0302\n"

&#43;"harly\n "&#43;" 完成 ",

"参与者",

JOptionPane.INFORMATION_MESSAGE);

}

if(e.getSource()&#61;&#61;del)

{

//index

//delPaintList(index);

fileName.removeElementAt(indexForDel);

dirName.removeElementAt(indexForDel);

numList.removeAllElements();//从三个容器里面移除此项

Enumeration enumFile&#61;fileName.elements();

while(enumFile.hasMoreElements())

{

numList.addElement((numList.size()&#43;1)&#43;"."&#43;enumFile.nextElement());

//numList添加元素&#xff0c;显示播放里表中

}

//list.setListData(fileName);

list.setListData(numList);

if(index

list.setSelectedValue(numList.elementAt(index),true);

else

{

if(index&#61;&#61;indexForDel);

else

if(index!&#61;0)

list.setSelectedValue(numList.elementAt(index-1),true);

}

//list.setSelectedIndex(index);

}

if(e.getSource()&#61;&#61;delAll)//全部删除

{

fileName.removeAllElements();

dirName.removeAllElements();

numList.removeAllElements();

list.setListData(numList);

}

if(e.getSource()&#61;&#61;reName)//重命名

{

String name;//&#61;JOptionPane.showInputDialog(this,"请输入新的名字");

try

{

name&#61;reNames();

fileName.setElementAt(name,indexForDel);

numList.setElementAt((indexForDel&#43;1)&#43;"."&#43;name,indexForDel);

}

catch(ReName e2)//自定义的异常

{

}

}

if(e.getSource()&#61;&#61;infor)

{

dialog1.setVisible(true);

}

}

public static void main(String[] args)

{

final MediaPlayer mp&#61;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("注意&#xff1a;更新文件列表后&#xff0c;请先正常关闭播放器"

&#43;"\n然后再关闭此DOS窗口&#xff0c;否则导致播放列表不能保存&#xff01;&#xff01;");

}

private void openFile()//为了界面原因&#xff0c;此代码重写&#xff0c;估计兼容性不好了

{

/*JFileChooser fileChooser&#61;new JFileChooser();//文件选择器

fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);//可以选择文件不能目录

int result&#61;fileChooser.showOpenDialog(this);//创建文件打开对话框&#xff0c;并设定此程序为父窗口监控*/

/*通过result的值来判断文件是否打开成功

*JFileChooser类有很多静态成员变量

**/

/*if(result&#61;&#61;JFileChooser.CANCEL_OPTION)

{

file&#61;null;//file已经在类中定义&#xff0c;如果选择取消&#xff0c;file指向为空

}

else

{

file&#61;fileChooser.getSelectedFile();//获得文件对象

title&#61;file.getAbsolutePath();//取得文件的绝对路径并且赋给title设定标题

}*/

//if(fd&#61;&#61;null)

//{

//String filename&#61;"java音频播放器";

fd &#61; new FileDialog(MediaPlayer.this);

//Filters fl&#61;new Filters();

//fd.setFilenameFilter(fl);

fd.setVisible(true);

if (fd.getFile() !&#61; null)

{

title &#61; fd.getDirectory() &#43; fd.getFile();//原因请见同目录下的FileDialogDemo.java文件

files&#61;fd.getFile();

//dir &#61;fd.getDirectory();

file&#61;new File(title);

createPlayer();

}

//title&#61;filename;

//fd&#61;null;//缺少此句如果第一次打开文件的时候取消操作的时候第二次也不能打开文件了

//}

}

private void openDir()

{

JFileChooser fileChooser&#61;new JFileChooser();

fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

int result&#61;fileChooser.showOpenDialog(MediaPlayer.this);

if(result&#61;&#61;JFileChooser.CANCEL_OPTION)

return;

file&#61;fileChooser.getSelectedFile();

if(file&#61;&#61;null||file.getName().equals(""))

JOptionPane.showMessageDialog(this,"错误的路径",

"出错了",JOptionPane.ERROR_MESSAGE);

String[] sFiles&#61;file.list();

for(int i&#61;0;i

{

fileName.addElement(sFiles[i]);

numList.addElement((numList.size()&#43;1)&#43;"."&#43;sFiles[i]);

dirName.addElement(file.getAbsolutePath()&#43;"\\"&#43;sFiles[i]);

}

list.setListData(numList);

/*fd&#61;new FileDialog(MediaPlayer.this);

fd.setVisible(true);

if(fd.getDirectory()!&#61;null)

{

File fileDir&#61;new File(fd.getDirectory());

String[] ss&#61;fileDir.list();

for(int i&#61;0;i

{

System.out.println(ss[i]);

}

}*/

}

请采纳答案&#xff0c;支持我一下。

2Q&#61;&#61;

已赞过

已踩过<

你对这个回答的评价是&#xff1f;

评论

收起



推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
author-avatar
怦然欣动and败
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有