JAVA帶面板的視頻播放器制作課程設(shè)計_第1頁
JAVA帶面板的視頻播放器制作課程設(shè)計_第2頁
JAVA帶面板的視頻播放器制作課程設(shè)計_第3頁
JAVA帶面板的視頻播放器制作課程設(shè)計_第4頁
JAVA帶面板的視頻播放器制作課程設(shè)計_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、【精品文檔】如有侵權(quán),請聯(lián)系網(wǎng)站刪除,僅供學(xué)習(xí)與交流JAVA帶面板的視頻播放器制作課程設(shè)計.精品文檔.JAVA課程設(shè)計報告課 題: 帶面板的視頻播放器的制作 專業(yè)班級: 計算機科學(xué)與計算學(xué) 學(xué) 號: 201017010227 姓 名: 朱 林 同組成員: 李 偉 指導(dǎo)教師: 唐 石 評閱意見:評定成績: 指導(dǎo)老師簽名: 年 月 日目 錄目 錄第1章 課程設(shè)計的目的和意義31.1 設(shè)計目的31.2 設(shè)計意義3第2章 課程設(shè)計要求3第3章 需求分析4第4章 程序設(shè)計過程5 4.1 實驗原理5 4.2 程序設(shè)計圖6 4.3 設(shè)計及核心代碼7第5章 系統(tǒng)測試15第6章 心得體會19第7章 參考文獻20

2、第1章 課程設(shè)計的目的和意義1.1 設(shè)計目的 1.訓(xùn)練掌握,加深理解并鞏固java語言程序設(shè)計課程中所學(xué)到的基本概念、編程思路以及語法知識2.綜合運用java程序設(shè)計的編程方法,能夠利用這些程序設(shè)計方法來解決工程和科研中常見的實際問題3.培育分析問題解決問題的能力,進一步提高并鞏固進行大型程序設(shè)計的能力4.提高學(xué)生實踐論文撰寫能力1.2 設(shè)計意義java 是一種高級編程語言,是編程的基本工具,是為軟件開發(fā),網(wǎng)頁制作等與計算機編程有關(guān)專業(yè)的基礎(chǔ)課程!學(xué)好java語言程序設(shè)計對計算機專業(yè)的人來說必不可少的一件事,對大學(xué)生將來進入軟件行業(yè)從事java軟件開發(fā)有著不可替代的作用,為大學(xué)生提供了一種鍛煉

3、自我勇于實踐的能力,也提高大學(xué)生的動手能力,所以課程設(shè)計是相當(dāng)?shù)闹匾5?章 課程設(shè)計要求Java程序設(shè)計是計算機網(wǎng)絡(luò)工程專業(yè)一門重要的專業(yè)必修課。為了進一步鞏固課堂上所學(xué)到的知識,深刻把握Java技術(shù)的重要概念及其面向?qū)ο蟮奶匦?,鍛煉學(xué)生熟練的應(yīng)用面向?qū)ο蟮乃枷牒驮O(shè)計方法解決實際問題的能力,開設(shè)Java程序設(shè)計的課程設(shè)計。課程設(shè)計的任務(wù)是完成課程設(shè)計內(nèi)容,寫出課程設(shè)計報告。要求學(xué)生掌握:1.掌握Java的語言規(guī)范,面向?qū)ο蟮暮诵母拍詈吞匦裕?.掌握Java的編程技術(shù),包括異常處理,圖形界面設(shè)計,多線程,網(wǎng)絡(luò)通信程序等;3.掌握Java應(yīng)用軟件的開發(fā)環(huán)境和開發(fā)過程;4.掌握基于Jsp網(wǎng)站的開發(fā)

4、環(huán)境和開發(fā)過程;5.掌握面向?qū)ο蟮乃枷牒统绦蛟O(shè)計方法。第3章 需求分析3.1任務(wù)目的:1實現(xiàn)視頻文件的正確播放;2. 能夠?qū)崿F(xiàn)對視頻播放的控制,如暫停,播放,快進,快退,上一個,下一個等功能;3能夠進行文件視頻的選擇,全屏,音量的控制,拖動,播放模式的控制等;4任意改變播放視頻界面大小等功能。3.2程序的設(shè)計、調(diào)試、運行的軟件環(huán)境:操作系統(tǒng):Windows XP(SP2)數(shù)據(jù)庫及數(shù)據(jù)庫管理軟件:SQL Server 2005JDK環(huán)境:Java SE Development Kit(JDK)Version 6開發(fā)工具:Eclipse運行平臺:Windows、Linux各個版本、MAC等任何平臺

5、運行環(huán)境:Java SE Runtime Environment(JRE)Version第4章 程序設(shè)計過程4.1實驗原理JMF提供了一個平臺無關(guān)的框架來呈現(xiàn)時基媒體(time-based media)。JavaMediaPlayerAPI的設(shè)計目標(biāo)是支持多種標(biāo)準的媒體格式,包括MPEG-1,MPEG-2,QuickTime,AVI,WAV,AU和MIDI.使用JMF,可以同步呈現(xiàn)不同來源的時基媒體?,F(xiàn)有的一些媒體播放器都嚴重依賴原生碼來執(zhí)行解壓縮、渲染 等 計算密集型任務(wù)。而JMF API則隱藏了具體實現(xiàn),只提供抽象的編程接口。舉例來說,一個用JMF制作的播放器,具體運行的過程中可能會調(diào)用到

6、操作系統(tǒng)的本地方法,但開發(fā)者寫代碼時可以無視本地方法的存在。JMF Player API :· 接入不同的協(xié)議和分發(fā)(傳輸)機制· 接入不同的媒體數(shù)據(jù)類型定義事件模型,用于Player和應(yīng)用程序間的異步通信JMF對于errors(錯誤)和exceptions(異常)作如下約定。· Java Media Errors 是當(dāng)程序調(diào)用了一個當(dāng)前狀態(tài)下非法的方法時拋出的。Errors是在外部程序有控制權(quán)的狀態(tài)下執(zhí)行了非法的請求而拋出的。舉例來說,調(diào)用一個處于Started的Player的方法時拋出的就是error。開發(fā)者有責(zé)任在調(diào)用方法前確認Player已被停止。JMF

7、error是可以通過優(yōu)化代碼來避免的,應(yīng)用程序不應(yīng)該捕獲JMF errors, 好的應(yīng)用程序不會碰到這些錯誤。· Java Media Exceptions是當(dāng)程序調(diào)用了不能完成的方法或在當(dāng)前狀態(tài)下不適用的方法。Exceptions是在外部程序沒有控制權(quán)的狀態(tài)下拋出的。例如當(dāng)我們試圖同步兩個time-base不匹配的Player時,就會拋出異常。之所以是異常而不是錯誤,是因為我們無從檢測time-base是否匹配,是無法預(yù)期的。有時,JMF的一些方法會返回非預(yù)期的結(jié)果,通過檢查返回直,我們可以檢測實際發(fā)生的事情:· 我們可以通過返回直檢查實際被設(shè)置的數(shù)值,例如:并不是所有的

8、播放器都可以每周期5次的速率呈現(xiàn)媒體數(shù)據(jù),如果我們調(diào)了setRate(5.0),播放器將會設(shè)置一個合法的近似直,這個數(shù)值可能是5.0也可能是1.0,我們需要檢查返回數(shù)據(jù)來確認被設(shè)置的數(shù)據(jù)。· 有時,我們請求的信息是不可用的。例如:Player在播完一個媒體之前,可能不知道媒體的時長,這時如果我們調(diào)了getDuration(),getDuration會返回 DURATION_UNKNOWN.當(dāng)媒體被播放完一次,再調(diào)getDuration時,則會返回正確的時長。JMF播放器文件播放上一個設(shè)置打開循環(huán)退出暫停刪除下一個4.2程序設(shè)計圖4.3設(shè)計及核心代碼創(chuàng)建“文件”菜單l 創(chuàng)建“打開”菜單

9、l 把JMFMediaPlayer對象注冊成功為“打開”菜單項動作事件的監(jiān)聽器l 把“打開”菜單項加入“文件”菜單l 把“文件”菜單中加入一條水平分隔線l 創(chuàng)建帶檢查框的“循環(huán)”菜單項l 把JMFMediaPlayer對象注冊成功為“循環(huán)”菜單項動作事件的監(jiān)聽器l 把“循環(huán)”菜單項加入“文件”菜單l 在“文件”菜單項中加入一條水平分隔線l 按照創(chuàng)建“打開”菜單項的過程,創(chuàng)建“退出”菜單項l 創(chuàng)建“播放”菜單l 創(chuàng)建“上一個”菜單l 創(chuàng)建“下一個”菜單項l 創(chuàng)建“保存”菜單l 把JMFMediaPlayer對象注冊成功為“暫?!辈藛雾梽幼魇录谋O(jiān)聽器l 把“暫?!辈藛雾椉尤搿霸O(shè)置”菜單l 在“設(shè)

10、置”菜單中加入一條水平分隔線l 創(chuàng)建“刪除”菜單項l 把JMFMediaPlayer對象注冊成功為“刪除”菜單項動作事件的監(jiān)聽器l 創(chuàng)建一個菜單條(MenuBar)l 把“文件”菜單加入到菜單條l 把“播放控制”菜單加入到菜單條l 把“播放列表”菜單加入到菜單條/ 創(chuàng)建播放器的菜單 JMenu zhu= new JMenu("設(shè)置"); JMenu fileMenu = new JMenu("文件"); JMenu zhu1= new JMenu("播放");JMenu zhu2= new JMenu("上一個")

11、;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.

12、add(haha2); zhu.addSeparator(); zhu.add(haha3); zhu.addSeparator(); zhu.add(haha4); zhu.addSeparator(); zhu.add(haha5); zhu.addSeparator(); / 添加一個分割條 fileMenu.addSeparator(); / 創(chuàng)建一個復(fù)選框菜單項 JCheckBoxMenuItem loopMenuItem = new JCheckBoxMenuItem("循環(huán)", false); loopMenuItem.addItemListener(this

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

14、(zhu3);this.setJMenuBar(menuBar); this.setSize(200, 200); try / 設(shè)置界面的外觀,為系統(tǒng)外觀 UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); SwingUtilities.updateComponentTreeUI(this); catch (Exception e) e.printStackTrace(); this.setVisible(true); 動作監(jiān)聽器動作監(jiān)聽器根據(jù)用戶的操作作出相應(yīng)的反應(yīng)(1) 如果動作事件起源于“退出”菜單項,觸

15、發(fā)一個給查監(jiān)聽器的窗口關(guān)閉事件(2) 如果動作事件起源于“播放“菜單項,判斷當(dāng)前是否存在一個播放器,存在則將該播放器置于運動狀態(tài)(3) 如果動作事件起源于“暫?!辈藛雾?,判斷當(dāng)前是否存在一個播放器,存在則停止該播放器的播放(4) 如果動作事件起源于“下一個”菜單項,判斷當(dāng)前是否存在一個播放器,存在則停止該播放器的播放,并把播放指針移到下一個文件(5) 如果動作事件起源于“打開”菜單,則:l 創(chuàng)建一個“打開媒體文件“對話框l 把對話框的當(dāng)前目錄設(shè)置為上次關(guān)閉時的目錄l 顯示對話框。這個對話框是一個模式對話框l 如果用戶沒有通過對話框選擇媒體文件,則返回(6) 如果出現(xiàn)異常l 顯示錯誤信息,然后返

16、回l 把主窗口的標(biāo)題設(shè)置為媒體文件的名字l 把JMFMediaPlayer對象注冊為來自JMF播放器對象的控制器事件的監(jiān)聽器l 讓JMF播放器對象預(yù)先提取媒體內(nèi)容* 實現(xiàn)了ActionListener接口,處理組件的活動事件 public void actionPerformed(ActionEvent e) if (e.getActionCommand().equals("退出") / 調(diào)用dispose以便執(zhí)行windowClosed dispose(); return; FileDialog fileDialog = new FileDialog(this, &quo

17、t;打開媒體文件", FileDialog.LOAD); fileDialog.setDirectory(currentDirectory); fileDialog.setVisible(true); / 如果用戶放棄選擇文件,則返回 if (fileDialog.getFile() = null) return; currentDirectory = fileDialog.getDirectory(); if (player != null) / 關(guān)閉已經(jīng)存在JMF播放器對象 player.close(); try / 創(chuàng)建一個打開選擇文件的播放器 player = Manager

18、.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("無法創(chuàng)建播放器."

19、;); return; first = false; this.setTitle(fileDialog.getFile(); / 播放器的控制事件處理 player.addControllerListener(this); / 預(yù)讀文件內(nèi)容 player.prefetch(); 控制監(jiān)聽器控制監(jiān)聽器完成與控制相關(guān)的操作,具體包括以下幾種情況(1) 當(dāng)控制器被關(guān)閉,如果JMF播放器的視覺部分存在,從JMFMediaPlayer容器拆除視覺部件。如果JMF播放器的控制面板部件存在,從從JMFMediaPlayer容器拆除控制面板部件(2) 當(dāng)媒體回放結(jié)束,復(fù)位JMF播放器對象的開始時間。(3) 當(dāng)

20、預(yù)提取媒體內(nèi)容結(jié)束,JMF播放器對象開始播放媒體(4) 當(dāng)實例化(realize)完成,則l 獲取JMF播放器對象的視覺部件,如果視覺部件存在,則把它加入到JMFMediaPlayer容器的中間l 獲取JMF播放器對象的控制面板部件,如果控制面板部件存在,則把它加入到JMFMediaPlayer容器的下方l 獲取JMF播放器對象的擴展控制面板部件,如果擴展控制面板部件存在,則把它加入到JMFMediaPlayer容器的上方l 如果播放中含有圖形,執(zhí)行pack()操作* 實現(xiàn)ControllerListener接口的方法,處理播放器的控制事件 public void controllerUpda

21、te(ControllerEvent e) / 調(diào)用player.close()時ControllerClosedEvent事件出現(xiàn)。 / 如果存在視覺部件,則該部件應(yīng)該拆除(為一致起見, / 我們對控制面板部件也執(zhí)行同樣的操作) if (e instanceof ControllerClosedEvent) if (vedioComponent != null) this.getContentPane().remove(vedioComponent); this.vedioComponent = null; if (controlComponent != null) this.getCont

22、entPane().remove(controlComponent); this.controlComponent = null; return; / 如果是媒體文件到達尾部事件 if (e instanceof EndOfMediaEvent) if (loop) / 如果允許循環(huán),則重新開始播放 player.setMediaTime(new Time(0); player.start(); return; / 如果是播放器預(yù)讀事件 if (e instanceof PrefetchCompleteEvent) / 啟動播放器 player.start(); return; / 如果是文件

23、打開完全事件,則顯示視頻組件和控制器組件 if (e instanceof RealizeCompleteEvent) vedioComponent = player.getVisualComponent(); if (vedioComponent != null) this.getContentPane().add(vedioComponent); controlComponent = player.getControlPanelComponent(); if (controlComponent != null) this.getContentPane().add(controlCompon

24、ent, BorderLayout.SOUTH); this.pack(); 其他監(jiān)聽器1 菜單項監(jiān)聽器菜單項監(jiān)聽器主要針對“循環(huán)”菜單項的單擊動作進行反應(yīng)當(dāng)菜單項狀態(tài)改變時,切換“循環(huán)”菜單被選中的狀態(tài)2 窗口監(jiān)聽器值得注意的是窗口監(jiān)聽器是在構(gòu)造函數(shù)中進行定義和注冊的,這一點不同于以上介紹的其他方法,它只是在退出窗口時執(zhí)行。l 定窗口大小,并顯示控制器/ 處理“循環(huán)”復(fù)選框菜單項的點擊事件 public class Zhu extends JFrame implements ActionListener, ControllerListener, ItemListener / JMF的播放器

25、Player player; / 播放器的視頻組件和控制組件 Component vedioComponent; Component controlComponent; / 標(biāo)示是否是第一次打開播放器 boolean first = true; / 標(biāo)示是否需要循環(huán) boolean loop = false; / 文件當(dāng)前目錄 String currentDirectory; / 構(gòu)造方法 public Zhu(String title) super(title); addWindowListener(new WindowAdapter() public void windowClosing(

26、WindowEvent e) / 用戶點擊窗口系統(tǒng)菜單的關(guān)閉按鈕 / 調(diào)用dispose以執(zhí)行windowClosed dispose(); public void windowClosed(WindowEvent e) if (player != null) / 關(guān)閉JMF播放器對象 player.close(); System.exit(0); public void itemStateChanged(ItemEvent e) loop = !loop; 第5章 系統(tǒng)測試1.測試視頻文件我們首先來播放一個視頻,以鐵拳:血之復(fù)仇為例,視頻格式為AVI格式,以下為視頻截圖2.測試音頻文件下面來測試一下播放音頻文件,以本兮:情花為例,此音樂文件的格式為WAV3.最終結(jié)果通過上面的實例測試,我們

溫馨提示

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

評論

0/150

提交評論