JAVA帶面板的視頻播放器制作課程設計.doc_第1頁
JAVA帶面板的視頻播放器制作課程設計.doc_第2頁
JAVA帶面板的視頻播放器制作課程設計.doc_第3頁
JAVA帶面板的視頻播放器制作課程設計.doc_第4頁
JAVA帶面板的視頻播放器制作課程設計.doc_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

JAVA帶面板的視頻播放器制作課程設計.doc.doc 免費下載

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

.JAVA課程設計報告課 題: 帶面板的視頻播放器的制作 專業班級: 計算機科學與計算學 學 號: 201017010227 姓 名: 朱 林 同組成員: 李 偉 指導教師: 唐 石 評閱意見:評定成績: 指導老師簽名: 年 月 日目 錄目 錄第1章 課程設計的目的和意義31.1 設計目的31.2 設計意義3第2章 課程設計要求3第3章 需求分析4第4章 程序設計過程5 4.1 實驗原理5 4.2 程序設計圖6 4.3 設計及核心代碼7第5章 系統測試15第6章 心得體會19第7章 參考文獻20第1章 課程設計的目的和意義1.1 設計目的 1.訓練掌握,加深理解并鞏固java語言程序設計課程中所學到的基本概念、編程思路以及語法知識2.綜合運用java程序設計的編程方法,能夠利用這些程序設計方法來解決工程和科研中常見的實際問題3.培育分析問題解決問題的能力,進一步提高并鞏固進行大型程序設計的能力4.提高學生實踐論文撰寫能力1.2 設計意義java 是一種高級編程語言,是編程的基本工具,是為軟件開發,網頁制作等與計算機編程有關專業的基礎課程!學好java語言程序設計對計算機專業的人來說必不可少的一件事,對大學生將來進入軟件行業從事java軟件開發有著不可替代的作用,為大學生提供了一種鍛煉自我勇于實踐的能力,也提高大學生的動手能力,所以課程設計是相當的重要。第2章 課程設計要求Java程序設計是計算機網絡工程專業一門重要的專業必修課。為了進一步鞏固課堂上所學到的知識,深刻把握Java技術的重要概念及其面向對象的特性,鍛煉學生熟練的應用面向對象的思想和設計方法解決實際問題的能力,開設Java程序設計的課程設計。課程設計的任務是完成課程設計內容,寫出課程設計報告。要求學生掌握:1.掌握Java的語言規范,面向對象的核心概念和特性;2.掌握Java的編程技術,包括異常處理,圖形界面設計,多線程,網絡通信程序等;3.掌握Java應用軟件的開發環境和開發過程;4.掌握基于Jsp網站的開發環境和開發過程;5.掌握面向對象的思想和程序設計方法。第3章 需求分析3.1任務目的:1實現視頻文件的正確播放;2. 能夠實現對視頻播放的控制,如暫停,播放,快進,快退,上一個,下一個等功能;3能夠進行文件視頻的選擇,全屏,音量的控制,拖動,播放模式的控制等;4任意改變播放視頻界面大小等功能。3.2程序的設計、調試、運行的軟件環境:操作系統:Windows XP(SP2)數據庫及數據庫管理軟件:SQL Server 2005JDK環境:Java SE Development Kit(JDK)Version 6開發工具:Eclipse運行平臺:Windows、Linux各個版本、MAC等任何平臺運行環境:Java SE Runtime Environment(JRE)Version第4章 程序設計過程4.1實驗原理JMF提供了一個平臺無關的框架來呈現時基媒體(time-based media)。JavaMediaPlayerAPI的設計目標是支持多種標準的媒體格式,包括MPEG-1,MPEG-2,QuickTime,AVI,WAV,AU和MIDI.使用JMF,可以同步呈現不同來源的時基媒體。現有的一些媒體播放器都嚴重依賴原生碼來執行解壓縮、渲染 等 計算密集型任務。而JMF API則隱藏了具體實現,只提供抽象的編程接口。舉例來說,一個用JMF制作的播放器,具體運行的過程中可能會調用到操作系統的本地方法,但開發者寫代碼時可以無視本地方法的存在。JMF Player API : 接入不同的協議和分發(傳輸)機制 接入不同的媒體數據類型定義事件模型,用于Player和應用程序間的異步通信JMF對于errors(錯誤)和exceptions(異常)作如下約定。 Java Media Errors 是當程序調用了一個當前狀態下非法的方法時拋出的。Errors是在外部程序有控制權的狀態下執行了非法的請求而拋出的。舉例來說,調用一個處于Started的Player的方法時拋出的就是error。開發者有責任在調用方法前確認Player已被停止。JMF error是可以通過優化代碼來避免的,應用程序不應該捕獲JMF errors, 好的應用程序不會碰到這些錯誤。 Java Media Exceptions是當程序調用了不能完成的方法或在當前狀態下不適用的方法。Exceptions是在外部程序沒有控制權的狀態下拋出的。例如當我們試圖同步兩個time-base不匹配的Player時,就會拋出異常。之所以是異常而不是錯誤,是因為我們無從檢測time-base是否匹配,是無法預期的。有時,JMF的一些方法會返回非預期的結果,通過檢查返回直,我們可以檢測實際發生的事情: 我們可以通過返回直檢查實際被設置的數值,例如:并不是所有的播放器都可以每周期5次的速率呈現媒體數據,如果我們調了setRate(5.0),播放器將會設置一個合法的近似直,這個數值可能是5.0也可能是1.0,我們需要檢查返回數據來確認被設置的數據。 有時,我們請求的信息是不可用的。例如:Player在播完一個媒體之前,可能不知道媒體的時長,這時如果我們調了getDuration(),getDuration會返回 DURATION_UNKNOWN.當媒體被播放完一次,再調getDuration時,則會返回正確的時長。JMF播放器文件播放上一個設置打開循環退出暫停刪除下一個4.2程序設計圖4.3設計及核心代碼創建“文件”菜單l 創建“打開”菜單l 把JMFMediaPlayer對象注冊成功為“打開”菜單項動作事件的監聽器l 把“打開”菜單項加入“文件”菜單l 把“文件”菜單中加入一條水平分隔線l 創建帶檢查框的“循環”菜單項l 把JMFMediaPlayer對象注冊成功為“循環”菜單項動作事件的監聽器l 把“循環”菜單項加入“文件”菜單l 在“文件”菜單項中加入一條水平分隔線l 按照創建“打開”菜單項的過程,創建“退出”菜單項l 創建“播放”菜單l 創建“上一個”菜單l 創建“下一個”菜單項l 創建“保存”菜單l 把JMFMediaPlayer對象注冊成功為“暫停”菜單項動作事件的監聽器l 把“暫停”菜單項加入“設置”菜單l 在“設置”菜單中加入一條水平分隔線l 創建“刪除”菜單項l 把JMFMediaPlayer對象注冊成功為“刪除”菜單項動作事件的監聽器l 創建一個菜單條(MenuBar)l 把“文件”菜單加入到菜單條l 把“播放控制”菜單加入到菜單條l 把“播放列表”菜單加入到菜單條/ 創建播放器的菜單 JMenu zhu= new JMenu(設置); JMenu fileMenu = new JMenu(文件); JMenu zhu1= new JMenu(播放);JMenu zhu2= new JMenu(上一個);JMenu zhu3= new JMenu(下一個);JMenuItem openMemuItem = new JMenuItem(打開); JMenuItem haha1 = new JMenuItem(暫停); JMenuItem haha2 = new JMenuItem(刪除); openMemuItem.addActionListener(this); fileMenu.add(openMemuItem); zhu.add(haha1); zhu.addSeparator(); zhu.add(haha2); zhu.addSeparator(); zhu.add(haha3); zhu.addSeparator(); zhu.add(haha4); zhu.addSeparator(); zhu.add(haha5); zhu.addSeparator(); / 添加一個分割條 fileMenu.addSeparator(); / 創建一個復選框菜單項 JCheckBoxMenuItem loopMenuItem = new JCheckBoxMenuItem(循環, false); loopMenuItem.addItemListener(this); fileMenu.add(loopMenuItem); fileMenu.addSeparator(); JMenuItem exitMemuItem = new JMenuItem(退出); exitMemuItem.addActionListener(this); fileMenu.add(exitMemuItem); JMenuBar menuBar = new JMenuBar(); menuBar.add(fileMenu); menuBar.add(zhu);menuBar.add(zhu1);menuBar.add(zhu2);menuBar.add(zhu3);this.setJMenuBar(menuBar); this.setSize(200, 200); try / 設置界面的外觀,為系統外觀 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); SwingUtilities.updateComponentTreeUI(this); catch (Exception e) e.printStackTrace(); this.setVisible(true); 動作監聽器動作監聽器根據用戶的操作作出相應的反應(1) 如果動作事件起源于“退出”菜單項,觸發一個給查監聽器的窗口關閉事件(2) 如果動作事件起源于“播放“菜單項,判斷當前是否存在一個播放器,存在則將該播放器置于運動狀態(3) 如果動作事件起源于“暫停”菜單項,判斷當前是否存在一個播放器,存在則停止該播放器的播放(4) 如果動作事件起源于“下一個”菜單項,判斷當前是否存在一個播放器,存在則停止該播放器的播放,并把播放指針移到下一個文件(5) 如果動作事件起源于“打開”菜單,則:l 創建一個“打開媒體文件“對話框l 把對話框的當前目錄設置為上次關閉時的目錄l 顯示對話框。這個對話框是一個模式對話框l 如果用戶沒有通過對話框選擇媒體文件,則返回(6) 如果出現異常l 顯示錯誤信息,然后返回l 把主窗口的標題設置為媒體文件的名字l 把JMFMediaPlayer對象注冊為來自JMF播放器對象的控制器事件的監聽器l 讓JMF播放器對象預先提取媒體內容/* * 實現了ActionListener接口,處理組件的活動事件 */ public void actionPerformed(ActionEvent e) if (e.getActionCommand().equals(退出) / 調用dispose以便執行windowClosed dispose(); return; FileDialog fileDialog = new FileDialog(this, 打開媒體文件, FileDialog.LOAD); fileDialog.setDirectory(currentDirectory); fileDialog.setVisible(true); / 如果用戶放棄選擇文件,則返回 if (fileDialog.getFile() = null) return; currentDirectory = fileDialog.getDirectory(); if (player != null) / 關閉已經存在JMF播放器對象 player.close(); try / 創建一個打開選擇文件的播放器 player = Manager.createPlayer(new MediaLocator(file: + fileDialog.getDirectory() + fileDialog.getFile(); catch (java.io.IOException e2) System.out.println(e2); return; catch (NoPlayerException e2) System.out.println(不能找到播放器.); return; if (player = null) System.out.println(無法創建播放器.); return; first = false; this.setTitle(fileDialog.getFile(); / 播放器的控制事件處理 player.addControllerListener(this); / 預讀文件內容 player.prefetch(); 控制監聽器控制監聽器完成與控制相關的操作,具體包括以下幾種情況(1) 當控制器被關閉,如果JMF播放器的視覺部分存在,從JMFMediaPlayer容器拆除視覺部件。如果JMF播放器的控制面板部件存在,從從JMFMediaPlayer容器拆除控制面板部件(2) 當媒體回放結束,復位JMF播放器對象的開始時間。(3) 當預提取媒體內容結束,JMF播放器對象開始播放媒體(4) 當實例化(realize)完成,則l 獲取JMF播放器對象的視覺部件,如果視覺部件存在,則把它加入到JMFMediaPlayer容器的中間l 獲取JMF播放器對象的控制面板部件,如果控制面板部件存在,則把它加入到JMFMediaPlayer容器的下方l 獲取JMF播放器對象的擴展控制面板部件,如果擴展控制面板部件存在,則把它加入到JMFMediaPlayer容器的上方l 如果播放中含有圖形,執行pack()操作* 實現ControllerListener接口的方法,處理播放器的控制事件 */ public void controllerUpdate(ControllerEvent e) / 調用player.close()時ControllerClosedEvent事件出現。 / 如果存在視覺部件,則該部件應該拆除(為一致起見, / 我們對控制面板部件也執行同樣的操作) if (e instanceof ControllerClosedEvent) if (vedioComponent != null) this.getContentPane().remove(vedioComponent); this.vedioComponent = null; if (controlComponent != null) this.getContentPane().remove(controlComponent); this.controlComponent = null; return; / 如果是媒體文件到達尾部事件 if (e instanceof EndOfMediaEvent) if (loop) / 如果允許循環,則重新開始播放 player.setMediaTime(new Time(0); player.start(); return; / 如果是播放器預讀事件 if (e instanceof PrefetchCompleteEvent) / 啟動播放器 player.start(); return; / 如果是文件打開完全事件,則顯示視頻組件和控制器組件 if (e instanceof RealizeCompleteEvent) vedioComponent = player.getVisualComponent(); if (vedioComponent != null) this.getContentPane().add(vedioComponent); controlComponent = player.getControlPanelComponent(); if (controlComponent != null) this.getContentPane().add(controlComponent, BorderLayout.SOUTH); this.pack(); 其他監聽器1 菜單項監聽器菜單項監聽器主要針對“循環”菜單項的單擊動作進行反應當菜單項狀態改變時,切換“循環”菜單被選中的狀態2 窗口監聽器值得注意的是窗口監聽器是在構造函數中進行定義和注冊的,這一點不同于以上介紹的其他方法,它只是在退出窗口時執行。l 定窗口大小,并顯示控制器/ 處理“循環”復選框菜單項的點擊事件 public class Zhu extends JFrame implements ActionListener, ControllerListener, ItemListener / JMF的播放器 Player player; / 播放器的視頻組件和控制組件 Component vedioComponent; Component controlComponent; / 標示是否是第一次打開播放器 boolean first = true; / 標示是否需要循環 boolean loop = false; / 文件當前目錄 String currentDirectory; / 構造方法 public Zhu(String title) super(title); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) / 用戶點擊窗口系統菜單的關閉按鈕 / 調用dispose以執行windowClosed dispose(); public void windowClosed(WindowEvent e) if (player != null) / 關閉JMF播放器對象 player.close(); System.exit(0); ); public void itemStateChanged(ItemEvent e) loop = !loop; 第5章 系統測試1.測試視頻文件我們首先來播放一個視頻,以鐵拳:血之復仇為例,視頻格式為AVI格式,以下為視頻截圖2.測試音頻文件下面來測試一下播放音頻文件,以本兮:情花為例,此音樂文件的格式為WAV3.最終結果通過上面的實例測試,我們可以看出,由于java 的JMF的緣故,ja

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論