如何用JMF编写MP3音乐播放器2 ——MP3文件工程的建立和源代码

杀马特。学长 韩版系。学妹 提交于 2019-12-02 20:27:38

如何用JMF编写MP3音乐播放器2

——MP3文件工程的建立和源代码

做完上面1的所有步骤之后,说明你已经把JMF的环境配置完毕,接下来我们就可以进行MP3java文件的编写了。

 

首先我们先建立一个java Projet文件

 

然后在java Project文件中建立一个文件夹,但是这个文件夹不是普通的文件夹(普通文件夹只用来存放数据或文件),而是需要建立一个【Source Folder】文件夹,该文件夹可以对内部文件进行编译和处理,我们所要编写的MP3文件就需要放在该文件夹下面。

 

在此我特别说几个注意事项:

1)、我们创建MediaPlayer的时候,它对应的包为:importjavax.media.bean.playerbean.MediaPlayer;但是该包不会自动的导入,所以这个包必须我们手动添加,不然会报程序错误

 

(2)我们需要验证一下我们导入的JMF包和环境配置是否成功,

我们发现在

已经导入和jmf.jarsound.jar

 

3JMF没有内置的MP3播放的插件,需要根据oracle官网上的说明安装这个才能使用。

JMF并不包含对MP3文件的解码,我们要播放MP3文件,就需要一个MP3的解码器,而这个解码器我们可以下载,大小只有几十KB,我们在【百度】搜索【JMF MP3 Plugin】,如图:


 

我们选择第二个,点击打开如下页面:

 

我们点击【DownLoad】进行相关下载。

或者在:http://www.pudn.com/downloads565/sourcecode/java/detail2326572.html进行下载

 

JMF MP3 Plugin该插件下载后,直接把该文件放在JDK的目录下即可。

 

 

下面是源代码:

 

import java.awt.BorderLayout;

import java.awt.Component;

import java.awt.FileDialog;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.util.Vector;

 

import javax.swing.ImageIcon;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JList;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

import javax.swing.JSplitPane;

import javax.swing.SwingUtilities;

import javax.media.ControllerEvent;

import javax.media.MediaLocator;

import javax.media.RealizeCompleteEvent;

import javax.media.bean.playerbean.MediaPlayer;

 

public class cuiPM3 {

 

    private static final long serialVersionUID = 1L; // 序列化,为了实现网络传输

    private static MediaPlayer MyPlayer;

    private static String filename = "d:\\和你一样.mp3";

    private static JFrame framePlay = null;

    private static JPanel panelPlay = null;

    private static JPanel panelList = null;

    private static JList listPlay = null;

    private static Vector vectorPlay = null;

    private static JMenuBar menuBar=null;

    private static JSplitPane SplitPanel=null;

 

    private static ActionListener openFile = new ActionListener() {

 

       @Override

       public void actionPerformed(ActionEvent e) {

           // TODO Auto-generated method stub

           FileDialog fd = new FileDialog(framePlay, "选择歌曲", FileDialog.LOAD); // 打开选择文件的选择框,提示框名为"选个歌曲",

           // this代表主类

           fd.setVisible(true); // 显示选择框

           filename = fd.getDirectory() + fd.getFile(); // 文件名称=获取此文件对话框的目录+文件名

           System.out.println(filename);

           if (filename.equals("")) {

              return;

           } else if (filename.equals("nullnull")) {

              return;

           }

           boolean j = false;

           for (int i = 0; i < vectorPlay.size(); i++) {

              if (vectorPlay.get(i).toString().equals(filename)) {// 如果数组里面的数据和文件名一样,则直接结束不添加

                  j = true;

                  break;

              }

           }

           if (j == false) {

              vectorPlay.add(filename); // 将文件名添加至动态数组里面

              listPlay.setListData(vectorPlay); // 列表框的数据添加动态数组

           }

       }

    };

 

    private static ActionListener closeFile = new ActionListener() {

 

       @Override

       public void actionPerformed(ActionEvent e) {

           // TODO Auto-generated method stub

           System.exit(0);

       }

    };

 

    private static ActionListener playMusic = new ActionListener() {

 

       @Override

       public void actionPerformed(ActionEvent e) {

           // TODO Auto-generated method stub

 

           play();

 

       }

    };

 

    private static ActionListener stopMusic = new ActionListener() {

 

       @Override

       public void actionPerformed(ActionEvent e) {

           // TODO Auto-generated method stub

 

           stop();

 

       }

    };

 

    public cuiPM3() {

       initialize();// 初始状态

    }

 

    private void initialize() {

       // TODO Auto-generated method stub

   

 

    }

 

    protected static void play() {

       // TODO Auto-generated method stub

       try {

           if (filename.equals("")) {

              return;

           }

           if (MyPlayer == null) {

              MyPlayer = new MediaPlayer();

           } else {

              closePreviosPlayer();

           }

           MyPlayer.setMediaLocator(new MediaLocator("file:///" + filename));  //建立一个播放器的定位时间

           //MyPlayer.addControllerListener(framePlay);

           MyPlayer.realize(); //

           MyPlayer.start(); // 开始播放歌曲

       } catch (Exception e) {

 

       }

    }

 

    private static void closePreviosPlayer() {

       // TODO Auto-generated method stub

 

       if (MyPlayer == null)

           return;

       MyPlayer.stop();

       MyPlayer.deallocate(); // 停止播放并且重新装载DateSource

       Component visual = MyPlayer.getVisualComponent(); /*

                                                  * player.getVisualComponent

                                                  * ()是一个播放所有视频媒体的可视组件。

                                                  */

       Component control = MyPlayer.getControlPanelComponent(); /*

                                                         * player.

                                                         * getControlPanelComponent

                                                         * (

                                                         * )是一个操作时间轴的可是组建

                                                         * ,

                                                         * 也包含了一些媒体的其他信息

                                                         * 。

                                                         */

       if (visual != null) {

           panelPlay.remove(visual);

       }

       if (control != null) {

           panelPlay.remove(control);

       }

 

    }

 

    protected static void stop() {

       // TODO Auto-generated method stub

       MyPlayer.stop();

       MyPlayer.deallocate();

    }

 

    /*

    public synchronized void controllerUpdate(ControllerEvent event) { // Player状态控制

       if (event instanceof RealizeCompleteEvent) {

           Component comp;

           if ((comp = MyPlayer.getControlPanelComponent()) != null) { // 操作时间轴不为空,就将其添加在面板最低端

              panelPlay.add("South", comp);

           } else {

              closePreviosPlayer();

           }

           if ((comp = MyPlayer.getVisualComponent()) != null) { // 可视化面板不为空就将其添加至居中

              panelPlay.add("Center", comp);

           }

           validate();

       }

    }

*/

    private void validate() {

       // TODO Auto-generated method stub

 

    }

 

   

private static MouseListener mouseAction=new MouseListener() {

 

    @Override

    public void mouseClicked(MouseEvent e) {

       // TODO Auto-generated method stub

      

       if (e.getClickCount() == 1) { // getClickCount鼠标监听事件,如果鼠标单击一次

           String str = (String) listPlay.getSelectedValue();

           if (str == null) {

              return;

           }

           filename = str;

           //System.out.println(str);// 如果单击一次则输出在他的歌曲名称

       }

       if (e.getClickCount() == 2) { // 如果鼠标单击两次

           String str = (String) listPlay.getSelectedValue(); // str接受鼠标选取的列表框中的值

           if (str == null) {// 如果为空,怎么什么都不做,否则开始播放str接受的歌曲

              return;

           }

           filename = str;

           play();

       }

      

    }

 

    @Override

    public void mousePressed(MouseEvent e) {

       // TODO Auto-generated method stub

      

    }

 

    @Override

    public void mouseReleased(MouseEvent e) {

       // TODO Auto-generated method stub

      

    }

 

    @Override

    public void mouseEntered(MouseEvent e) {

       // TODO Auto-generated method stub

    }

 

    @Override

    public void mouseExited(MouseEvent e) {

       // TODO Auto-generated method stub

      

    }

};

   

    public static void main(String[] args) {

       SwingUtilities.invokeLater(new Runnable() {  //个匿名内部类,runnable()是应用在多线程中的。它的实例化就默认调用了一个run()方法。

           public void run() {

              framePlay = new JFrame("我自己的MP3播放器");

              framePlay.setBounds(200, 100, 1100, 580);

              framePlay.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

              framePlay.setResizable(false);// 将最大化按钮的作用取消

             

              panelPlay = new JPanel(); // 创建一个左面的播放面板

              panelList = new JPanel(); // 创建一个右面的列表面板

             

              ImageIcon image=new ImageIcon("image/beijing.jpg");

              JLabel labelImage=new JLabel(image);

              panelPlay.add(labelImage,BorderLayout.WEST);

             

              SplitPanel = new JSplitPane();// 创建一个可分割的面板,用于将面板分为一左一右两个面板

              SplitPanel.setDividerSize(5); // 设置分格条的大小

              SplitPanel.setResizeWeight(0.01); // 设置分割的比例

              SplitPanel.setEnabled(false);  //固定分割条不可左右

              SplitPanel.setRightComponent(panelList); // 为分割的右面板添加播放列表面板

              SplitPanel.setLeftComponent(panelPlay); // 为分割的左面板添加播放面板

 

              listPlay = new JList(); // 定义一个列表框

             

              listPlay.addMouseListener(mouseAction);

             

              JLabel labelList=new JLabel("播放列表");

              panelList.add(labelList,BorderLayout.NORTH);

             

              vectorPlay = new Vector(); // 定义一个动态数组,用于接受我们添加的歌曲的列表

 

              panelList.add(listPlay);// 将列表框添加至列表面板

 

              menuBar = new JMenuBar(); // 定义一个空白的菜单条

              JMenu menu = new JMenu("文件"); // 定义一个文件的菜单组件

              JMenu menu2 = new JMenu("操作"); // 定义一个保存的菜单组件

              menuBar.add(menu);

              menuBar.add(menu2);

 

              JMenuItem menuItem = new JMenuItem("打开文件··"); // 定义一个"打开文件··"的菜单项

              menuItem.addActionListener(openFile);

 

              JMenuItem menuItem2 = new JMenuItem("关闭程序  "); // 定义一个"关闭程序"的菜单项

              menuItem2.addActionListener(closeFile);

 

              JMenuItem menuItem3 = new JMenuItem("播放"); // 定义一个"播放"的菜单项

              menuItem3.addActionListener(playMusic);

 

              JMenuItem menuItem4 = new JMenuItem("停止"); // 定义一个"停止"的菜单项

              menuItem4.addActionListener(stopMusic);

 

              // 为"文件"菜单组添加"打开文件··"和"关闭程序"两个菜单项

              menu.add(menuItem);

              menu.add(menuItem2);

 

              // 为"操作"菜单组添加"播放"和"停止"这两个菜单项

              menu2.add(menuItem3);

              menu2.add(menuItem4);

 

              framePlay.setJMenuBar(menuBar); // 将菜单条添加至顶层容器中

              framePlay.add(SplitPanel);

             

             

             

              framePlay.setVisible(true);

 

           }

       });

 

    }

 

}

 

效果如图所示:

 

 

 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!