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

JAVA帶面板的視頻播放器制作課程設(shè)計(jì).doc.doc 免費(fèi)下載

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

文檔簡(jiǎn)介

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論