熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

用Java構造自己的媒體播放器

2022-06-13   來源: Java核心技術 

  一概述
  
  
  首先我們來看看構造這個媒體播放器要達到什麼樣的目標確定了目標也就確定了代碼量和程序的復雜程度本文的媒體播放器要達到如下目標
  
  
  
  媒體播放器是一個菜單驅動的簡單AWT應用
  
  媒體播放器包含一個文件菜單文件菜單包含三個菜單項
  
  
  
  打開用來打開媒體文件
  
  循環是播放一次(默認)還是重復播放
  
  退出退出程序
  
  
  
  媒體播放器可以在多種平台上運行
  
  媒體播放器的核心功能通過JMF(Java Media Framework)API實現JMF擴展了JSE平台的多媒體能力允許Java應用和Applet截取回放轉換包括音頻和視頻在內的多種媒體JMF支持多種媒體格式具體請參見Supported Media Formats and Capture Devices
  二初步設計
  
  
  我們把這個媒體播放器的設計分成兩個部分GUI設計偽代碼設計在GUI設計中我們要了解構成程序的各個GUI部件在偽代碼設計中我們用自然語言寫出程序運行原理
  
  
   GUI設計
  
  
  媒體播放器的用戶界面包含一個主窗口一個菜單和一個打開文件的對話框首先我們來看看主窗口的設計主窗口應該把窗口標題顯示為媒體播放器顯示文件菜單顯示彩色背景的歡迎信息圖一顯示了程序剛啟動時的主窗口
   
  圖一媒體播放器的主窗口
  
  文件菜單包含三個菜單項打開菜單顯示一個對話框用來選擇媒體文件的位置循環菜單決定媒體文件只播放一次(默認)還是反復播放(當菜單被選中)最後退出菜單關閉程序另外點擊主窗口右上角的關閉按鈕也可以關閉程序請參見圖二
   
  圖二文件菜單
  
  點擊文件/打開菜單時打開媒體文件對話框出現選中媒體文件之後點擊打開按鈕即可打開媒體文件點擊取消按鈕中止文件打開操作如圖三所示
   
  圖三打開媒體文件對話框
  
  除了上面提到的部件之外媒體播放器還包含一個視覺部件一個控制面板部件視覺部件順序播放媒體文件包含的各幀圖像控制面板部件允許用戶暫停開始媒體文件的回放或進行其他控制操作例如查看媒體文件信息
  
  
   偽代碼設計
  
  
  前面我們了解了構成媒體播放器GUI的各個部件下面要開始設想一下這個程序的具體構造在正式編寫代碼之前我們先用偽代碼的形式寫出這個程序的運行過程以後正式編寫代碼時只需把偽代碼翻譯成Java代碼即可下面給出了媒體播放器的偽代碼描述
  
  
  
  應用的類名稱MediaPlayer
  
  超類Frame
  
  監聽器分類動作事件控制器事件菜單項事件繪圖事件窗口事件
  
  
  main:
  
  * 為MediaPlayer對象分配內存調用MediaPlayer構造函數
  
  創建主窗口(同時隱含地創建/啟動了AWT後台線程)
  
  * 結束主程序線程此時AWT線程繼續運行
  
  
  MediaPlayer構造函數
  
  * 設置主窗口的標題
  
  * 注冊窗口監聽器以處理窗口關閉事件
  
  * 創建文件菜單
  
  
  * 創建打開菜單項
  
  * 把MediaPlayer對象注冊成為打開菜單項動作事件的監聽器
  
  * 把打開菜單項加入文件菜單
  
  
  * 在文件菜單中加入一條水平分隔線
  
  
  * 創建帶檢查框的循環菜單項
  
  * 把MediaPlayer對象注冊成為循環菜單項事件的監聽器
  
  * 把循環菜單項加入文件菜單
  
  
  * 在文件菜單中加入一條水平分隔線
  
  
  * 按照創建打開菜單項的過程創建退出菜單項
  
  
  * 創建一個菜單條(MenuBar)
  
  * 把文件菜單加入到菜單條
  
  * 把新創建的菜單條設置為主窗口的菜單條
  
  * 把主窗口的大小設置為*像素
  
  * 顯示主窗口
  
  * 結束構造函數
  
  
  動作監聽器
  
  
  當出現動作時
  
  * 如果動作事件起源於退出菜單項
  
  * 觸發一個給窗口監聽器的窗口關閉事件
  
  * 返回
  
  * 創建一個打開媒體文件對話框
  
  * 把對話框的當前目錄設置為上次關閉時的目錄
  
  * 顯示對話框這個對話框是一個模式對話框
  
  * 如果用戶沒有通過對話框選擇媒體文件
  
  * 返回
  
  * 保存用戶在對話框中選擇的目錄
  
  * 如果以前已經創建JMF播放器對象
  
  * 關閉該對象
  
  * 根據指定的目錄和名字創建一個使用file:協議的媒體定位器(MediaLocator)
  
  對象再利用該對象創建一個JMF播放器對象
  
  * 如果出現異常
  
  * 顯示錯誤信息然後返回
  
  * 把主窗口的標題設置為媒體文件的名字
  
  * 把MediaPlayer對象注冊為來自JMF播放器對象的控制器事件
  
  的監聽器
  
  * 讓JMF播放器對象預先提取媒體內容
  
  * 返回
  
  
  控制器監聽器
  
  
  當控制器被關閉
  
  * 如果JMF播放器的視覺部件存在從MediaPlayer容器拆除
  
  視覺部件
  
  * 如果JMF播放器的控制面板部件存在從MediaPlayer容器拆除
  
  控制面板部件
  
  * 返回
  
  
  當媒體回放結束
  
  * 如果循環菜單被選中
  
  * 復位JMF播放器對象的開始時間
  
  * 讓JMF播放器對象開始播放媒體
  
  * 返回
  
  
  當預提取媒體內容結束
  
  * JMF播放器對象開始播放媒體
  
  * 返回
  
  
  當實例化(realize)完成
  
  * 獲取JMF播放器對象的視覺部件
  
  * 如果視覺部件存在則把它加入到MediaPlayer容器的
  
  中間
  
  * 獲取JMF播放器對象的控制面板部件
  
  * 如果控制面板部件存在則把它加入到MedaPlayer容器的南方
  
  * 執行pack()操作
  
  * 返回
  
  
  菜單項監聽器
  
  
  當菜單項狀態改變
  
  * 切換循環菜單被選中的狀態
  
  * 返回
  
  
  繪畫事件監聽器
  
  
  paint()方法
  
  * 如果尚未裝入媒體文件
  
  * 獲得主窗口的寬度和高度
  
  * 用藍色填充窗口內的區域
  
  * 創建一種字體(DialogInput/粗體)並將它設置為主
  
  窗口的字體
  
  * 計算歡迎信息的以像素計的寬度
  
  * 把繪圖顏色改成白色
  
  * 在主窗口的中央顯示出歡迎信息
  
  * 調用Frame超類的paint()方法確保控制面板部件正確地畫出
  
  * 返回
  
  
  update()方法
  
  * 調用paint()方法
  
  * 返回
  
  
  窗口監聽器
  
  
  windowClosing
  
  * 調用dispose以執行windowClosed
  
  * 返回
  
  
  windowClosed
  
  * 如果已經創建JMF播放器對象
  
  * 關閉JMF播放器對象
  
  * 結束程序
  
  
  
  
  
  偽代碼的前面三行聲明了媒體播放器的類名稱超類的名稱和MediaPlayer類實現的監聽器帶有main:前綴的行表示MediaPlayer的main()方法類似地帶有構造函數前綴的行屬於MediaPlayer的構造函數偽代碼的其余內容分成五個監聽器分區動作監聽器控制器監聽器菜單項監聽器繪圖監聽器窗口監聽器每一個分區分別包含一個或多個方法
  
  三編寫代碼
  
  
  下面我們把前面的偽代碼轉換成Java代碼
  
  
  
  import dia*;
  
  import javaawt*;
  
  import javaawtevent*;
  
  
  class MediaPlayer extends Frame implements ActionListener
  
  ControllerListener ItemListener
  
  {
  
  Player player;
  
  Component vc cc;
  
  boolean first = true loop = false;
  
  
  String currentDirectory;
  
  
  MediaPlayer (String title)
  
  {
  
  super (title);
  
  addWindowListener
  
  (new WindowAdapter ()
  
  {
  

From:http://tw.wingwit.com/Article/program/Java/hx/201311/25658.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.