如何用JMF編寫MP3音樂播放器2 ——MP3文件工程的創建和源代碼

如何用JMF編寫MP3音樂播放器2

——MP3文件工程的創建和源代碼 html

作完上面1的全部步驟以後,說明你已經把JMF的環境配置完畢,接下來咱們就能夠進行MP3java文件的編寫了。 java

 

首先咱們先創建一個java Projet文件 ios

 

而後在java Project文件中創建一個文件夾,可是這個文件夾不是普通的文件夾(普通文件夾只用來存放數據或文件),而是須要創建一個【Source Folder】文件夾,該文件夾能夠對內部文件進行編譯和處理,咱們所要編寫的MP3文件就須要放在該文件夾下面。 數組

 

在此我特別說幾個注意事項: 網絡

1)、咱們建立MediaPlayer的時候,它對應的包爲:importjavax.media.bean.playerbean.MediaPlayer;可是該包不會自動的導入,因此這個包必須咱們手動添加,否則會報程序錯誤 多線程

 

(2)咱們須要驗證一下咱們導入的JMF包和環境配置是否成功, oracle

咱們發如今 ide

已經導入和jmf.jarsound.jar ui

 

3JMF沒有內置的MP3播放的插件,須要根據oracle官網上的說明安裝這個才能使用。 this

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);

 

           }

       });

 

    }

 

}

 

效果如圖所示:

 

 

 

相關文章
相關標籤/搜索