jsp597任務(wù)調(diào)度器的設(shè)計與實(shí)現(xiàn)-qkp論文_第1頁
jsp597任務(wù)調(diào)度器的設(shè)計與實(shí)現(xiàn)-qkp論文_第2頁
jsp597任務(wù)調(diào)度器的設(shè)計與實(shí)現(xiàn)-qkp論文_第3頁
jsp597任務(wù)調(diào)度器的設(shè)計與實(shí)現(xiàn)-qkp論文_第4頁
jsp597任務(wù)調(diào)度器的設(shè)計與實(shí)現(xiàn)-qkp論文_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

PAGEii太原理工大學(xué)畢業(yè)論文(設(shè)計)作者:(三號楷體)學(xué)號:(三號楷體)系部:計算機(jī)科學(xué)與工程系專業(yè):(三號楷體)(方向):(三號楷體)題目:(三號楷體)(內(nèi)容過長可分兩行)指導(dǎo)老師(姓名)(職稱/學(xué)位)提交日期2011年5月15日注:本模板中紅色字體為文章格式注釋,請自行刪除;此封面的楷體為GB_2312楷體;論文題目太原理工大學(xué)畢業(yè)論文(設(shè)計)Page1摘要任務(wù)調(diào)度是大型J2EEweb應(yīng)用中常見的工作。開發(fā)者希望以指定的間隔時間執(zhí)行各類操作,并完成一些無需用戶輸入的任務(wù)。Java中可有無數(shù)方法來做到這一點(diǎn),但是在web應(yīng)用中卻并沒有這方面的統(tǒng)一標(biāo)準(zhǔn)。當(dāng)許多開發(fā)人員參與同一個項目,并且以各自不同的方式來實(shí)現(xiàn)任務(wù)調(diào)度時,就可能產(chǎn)生很大問題。內(nèi)存和同步問題就是必須首先考慮的兩件事。事實(shí)上,一些開發(fā)者試圖調(diào)用操作系統(tǒng)層面的任務(wù)調(diào)度機(jī)制,如Unix平臺上的cron。這種編程實(shí)踐也許并不是太壞,但它將直接導(dǎo)致可移植性被拋到九霄云外。該程序是一個用java.swing編寫的一個窗口小程序。(包括主窗體和彈出窗體)包含一個菜單欄有一個任務(wù)列表區(qū)域用于顯示進(jìn)行中的任務(wù)的信息,其中可以對任務(wù)進(jìn)行選中有三個按鈕(添加任務(wù),結(jié)束任務(wù),查看狀態(tài),)添加任務(wù)按鈕:彈出一個新的窗口進(jìn)行任務(wù)的創(chuàng)建包括(任務(wù)名稱,選擇任務(wù)執(zhí)行方式,任務(wù)量,確定,取消)創(chuàng)建好之后任務(wù)開始按所選執(zhí)行方式執(zhí)行。結(jié)束任務(wù)按鈕:所選擇的的任務(wù)結(jié)束執(zhí)行,刪除任務(wù)列表中對應(yīng)的任務(wù)信息。查看狀態(tài):顯示出所選任務(wù)的執(zhí)行狀態(tài),(最好可以實(shí)現(xiàn)對任務(wù)進(jìn)行修改)。當(dāng)任務(wù)執(zhí)行完畢之后彈出一個提示窗口,然后在任務(wù)列表中清空對應(yīng)的信息。關(guān)鍵詞:任務(wù)調(diào)度可移植性,Java.swing

AbstractTaskschedulingisalargecommonworkofJ2EEwebapplications.Developerswanttospecifythetimeintervaltoperformvariousoperations,andcompletesometaskswithoutuserinput.InJavabuttherearecountlesswaystodothis,butinthewebapplicationisnouniformstandardinthisfield.Whenmanydeveloperstoparticipateinthesameproject,andintheirdifferentwaystoimplementthetaskscheduling,canmakeabigproblem.Memoryandsynchronizationproblemisthemustfirstconsiderthetwothings.Infact,somedevelopersaretryingtoinvoketheoperatingsystemleveltaskschedulingmechanism,suchasthecronUnixplatforms.Thiskindofprogrammingpracticesmaynotbesobad,butitwilldirectlyleadtoportabilityisthrowntotheoutsideofthecloudnineTheprogramisaintheJavaswingtowriteasmallprogramwindow.(includingthemainformsandpop-upform)containsamenubarisusedtodisplayalistoftasksforthetaskofinformation,inwhichthetaskscanbeselectedtohavethreebuttons(addtaskstoendthetask,tocheckthestatus,):addtasksbuttonpopupanewwindowforthecreationoftasksincluding(taskname,taskexecutionmodechoice,quota,sure,cancel)createdafterthestartaccordingtotheselectedtaskexecution.Endtaskbutton:endoftheselectedtaskexecution,deletethecorrespondingtaskinthetasklistinformation.Checkthestatus:showstheselectedtaskexecutionstatus,modified)(bestcanrealizethetask.AfterwhenthetaskhasbeencompletedBringupapromptwindow,andthenclearthecorrespondinginformationinthetasklist.Keywords:Quart;chedulingportability;java.swing

目錄第一章緒論1.1Java語言的出現(xiàn)自從1946年世界上第一臺電子計算機(jī)問世以來,計算模式的發(fā)展經(jīng)歷了三個階段:集中計算模式、分散計算模式和網(wǎng)絡(luò)計算模式。Internet的出現(xiàn),為在網(wǎng)絡(luò)計算模式下的科學(xué)計算和信息處理提供了良好平臺。然而,要充分利用網(wǎng)絡(luò)計算模式的功能與效益,平臺的運(yùn)行環(huán)境是個制約因素,而Java語言和Java技術(shù)則是解決這一問題的最佳途徑。1991年,SUN公司的JameGosling,BillJoe等人試圖為電視、烤箱等家用電器開發(fā)一種交互式的軟件系統(tǒng),這種應(yīng)用需要的是那種小而可靠的系統(tǒng),它能夠移植,并且實(shí)時性好,適用于網(wǎng)絡(luò)分布環(huán)境。流行的C++是自然的選擇。不過,開發(fā)過程中遇到的許多難以克服的困難使他們意識到必須徹底解決問題了,最終,開發(fā)成功了一個名為Oak的軟件,此中蘊(yùn)藏著Java的原型,當(dāng)時,并未引起人們的注意。1994年下半年,隨著Internet的迅猛發(fā)展,環(huán)球信息網(wǎng)WWW的快速增長,促進(jìn)了Java語言研制的進(jìn)展,使得它逐漸成為Internet上倍受歡迎的開發(fā)與編程語言。1995年5月Java正式問世,一些著名的計算機(jī)公司紛紛購買了Java語言的使用權(quán),如Microsoft、IBM、Netscape、Novell、Apple、DEC、SGI等。因此,Java語言被美國著名雜志PCMagazine評為1995年十大優(yōu)秀科技產(chǎn)品(計算機(jī)類僅此一項入選)之一,隨之大量出現(xiàn)了用Java編寫的軟件產(chǎn)品,受到工業(yè)界的重視與好評,認(rèn)為“Java是八十年代以來計算機(jī)界的一件大事”。微軟總裁比爾·蓋茨在認(rèn)真觀察了一段時間后,確認(rèn)“Java是長時間以來最卓越的程序設(shè)計語言”,并確定微軟整個軟件的開發(fā)戰(zhàn)略從PC單機(jī)時代向以網(wǎng)絡(luò)為中心的計算時代轉(zhuǎn)移,而購買Java則是他的重大戰(zhàn)略決策的實(shí)施部署。因此,Java的誕生必將對整個計算機(jī)產(chǎn)業(yè)發(fā)生深遠(yuǎn)的影響,對傳統(tǒng)的計算模型提出了新的挑戰(zhàn)。SUNMicrosystem公司的總裁ScottMcNealy認(rèn)為:Java對Internet和WWW開辟了一個嶄新的時代。有人預(yù)言:Java將成為網(wǎng)絡(luò)上的“世界語”,今后,用其他語言編寫的軟件統(tǒng)統(tǒng)都要用Java語言來改寫。1.1.2Java語言的主要特點(diǎn)Java語言是一種適用于網(wǎng)絡(luò)編程的語言,它的基本結(jié)構(gòu)與C++極為相似,但卻簡單得多。它集成了其它一些語言的特點(diǎn)和優(yōu)勢,又避開了它們的不足之處。它的主要特點(diǎn)如下:2.1簡單性Java與C++相比,不再支持運(yùn)算符重載、多級繼承及廣泛的自動強(qiáng)制等易混淆和較少使用的特性,而增加了內(nèi)存空間自動垃圾收集的功能,復(fù)雜特性的省略和實(shí)用功能的增加使得開發(fā)變得簡單而可靠。簡單化的另一個方面是Java的系統(tǒng)非常小,其基本解釋和類支持部分只占40KB,附加的基本標(biāo)準(zhǔn)庫和線程支持也只需增加175KB。因此,Java應(yīng)用軟件能在相當(dāng)小的系統(tǒng)之上獨(dú)立工作。2.2平臺獨(dú)立性這是Java最吸引人的地方。由于它采用先編譯成中間碼(字節(jié)碼),然后裝載與校驗,再解釋成不同的機(jī)器碼來執(zhí)行,即“Java虛擬機(jī)”的思想,“屏蔽”了具體的“平臺環(huán)境”特性要求,使得只要能支持Java虛擬機(jī),就可運(yùn)行各種Java程序。2.3面向?qū)ο蟮募夹g(shù)面向?qū)ο螅∣-O)的技術(shù)是近年來軟件開發(fā)中用得最為普遍的程序設(shè)計方法,,它通過把客觀事物進(jìn)行分類組合、參數(shù)封裝、用成員變量來描述對象的性質(zhì)、狀態(tài),而用方法(成員函數(shù))來實(shí)現(xiàn)其行為和功能。O-O技術(shù)具有繼承性、封裝性、多態(tài)性等眾多特點(diǎn),Java在保留這些優(yōu)點(diǎn)的基礎(chǔ)上,又具有動態(tài)聯(lián)編的特性,更能發(fā)揮出面向?qū)ο蟮膬?yōu)勢。多線程多線程機(jī)制使應(yīng)用程序能并行執(zhí)行,Java有一套成熟的同步原語,保證了對共享數(shù)據(jù)的正確操作.通過使用多線程,程序設(shè)計者可以分別用不同的線程完成特定的行為,而不需要采用全局的事件循環(huán)機(jī)制,這樣就很容易實(shí)現(xiàn)網(wǎng)絡(luò)上實(shí)時的交互行為。動態(tài)性Java的設(shè)計使它適合于一個不斷發(fā)展的環(huán)境。在類庫中可以自由地加入新的方法和實(shí)例變量而不會影響用戶程序的執(zhí)行。并且Java通過接口來支持多重繼承,使之比嚴(yán)格的類繼承具有更靈活的方式和擴(kuò)展性。安全性Java有建立在公共密鑰技術(shù)基礎(chǔ)上的確認(rèn)技術(shù).指示器語義的改變將使應(yīng)用程序不能再去訪問以前的數(shù)據(jù)結(jié)構(gòu)或是私有數(shù)據(jù),大多數(shù)病毒也就無法破壞數(shù)據(jù).因而,用Java可以構(gòu)造出無病毒、安全的系統(tǒng)。Java語言除上述主要特點(diǎn)外,還有高性能、分布性、強(qiáng)大性、解釋性、可移植性等,此處不再贅述。Java的發(fā)展Java自正式問世以來已經(jīng)歷了四年的歷程,時間雖短,發(fā)展極快。一年一度在美國舊金山召開的世界JavaOne語言開發(fā)者大會(JavaOneDeveloperConference)盛況空前正說明了這一點(diǎn)。四年中每年的JavaOne大會,既是了解Java最新技術(shù)動態(tài)、應(yīng)用成果和下一步發(fā)展趨勢的最好場所,又是推動下一年Java快速發(fā)展的重要動力。首屆JavaOne大會于1996年召開,各屆簡況如下:1996年5月29-31日,第一屆,出席會議者6500余人,來自工業(yè)界的超過一半。有人評價說:“這是近年計算機(jī)界最光輝的一次盛會”。工業(yè)界相當(dāng)看好Java語言,認(rèn)為它的使用將會引起一場軟件革命:從軟件的設(shè)計風(fēng)格、設(shè)計方法、設(shè)計目標(biāo)到設(shè)計過程,都會產(chǎn)生徹底的變革,“甚至?xí)淖兇诵乔虻纳罘绞健薄?997年,第二屆,出席會議者10000人。Java的追隨者不斷增加,應(yīng)用開發(fā)迅速起步。1998年3月24-27日,第三屆,出席會議者14000余人(注冊人數(shù)),注冊門票售價1195美元,否則1395美元,即使如此,仍有不少人不惜工本,擠入會場。本次會議除了軟件巨頭微軟未參加會議外,幾乎所有的計算機(jī)公司都參加了。展廳內(nèi)設(shè)300多個展臺,先后舉行了90場專題討論會,每場參加的人數(shù)從千人至五六千人不等。會議的主題是:通過Java的培訓(xùn)來帶動Java軟件的開發(fā)和技術(shù)研究,從而發(fā)展生產(chǎn)力,獲取高額利潤,提高生活質(zhì)量,推動信息產(chǎn)業(yè)的進(jìn)步。會議展出的內(nèi)容大致如下:Java開發(fā)工具軟件,如:JMF、JDK、SymantecVisualCafe、JavaDynamicManagementKit、JFC、JNDI、JavaStudio等;企業(yè)信息管理解決方案軟件,如:EJB(EnterpriseJavaBeans);基于Java技術(shù)的信息家電,如:機(jī)頂盒、Java電話等;個人信息綜合服務(wù)(Java戒指)、社會信息綜合查詢亭(Kiosk);電子商務(wù)軟件、智能卡、JavaCardAPI等;網(wǎng)絡(luò)計算環(huán)境下的Java服務(wù)器軟件、遠(yuǎn)程方法調(diào)用(RMI)、基于Java技術(shù)的移動計算設(shè)備;JMS(JavaMessageService)用于出版、票據(jù)訂閱的軟件;JOS(JavaOS)、基于Java技術(shù)的NC和JavaStation。1999年6月15-18日,第四屆,出席會議者達(dá)20000人,300多家廠商參展,舉辦400多場技術(shù)講座,555名演講者慷慨陳詞,精彩紛呈。這次大會的主要特點(diǎn)是:Java框架結(jié)構(gòu)被梳理清晰本次JavaOne大會上,Sun公司的一個重大舉措就是公布了Java平臺的最新架構(gòu)。重新定義的Java平臺以Java2為核心,由面向企業(yè)和服務(wù)器市場的企業(yè)版Java2(J2EE)、面向傳統(tǒng)PC客戶機(jī)市場的標(biāo)準(zhǔn)版Java2(J2SE)和面向信息電器等后PC終端設(shè)備市場的Micro版Java2(J2ME)三大部分組成。其中,J2EE包括EnterpriseJavaBeans(EJB)、JavaServerPages&JavaServlets、JavaMailAPI和JavaMassageService組成。而J2ME則是原有的PersonalJava、EmbeddedJava、JavaCard以及剛剛推出的Kjava組成。雖然新框架結(jié)構(gòu)中的內(nèi)容都是已有的,但這樣重新定義和組合,使得Java平臺的概念簡單化,從而變得易于理解,更適合于進(jìn)行市場推廣。2)重點(diǎn)放在企業(yè)平臺隨著Internet的飛速發(fā)展,企業(yè)計算模式正摒棄C/S結(jié)構(gòu)而采用Web-Browser結(jié)構(gòu),此即瘦客戶端/胖服務(wù)器、大容量數(shù)據(jù)庫的3層或N層體系結(jié)構(gòu)。由于Java的特點(diǎn),使得它在開發(fā)服務(wù)器端的應(yīng)用程序方面有著得天獨(dú)厚的優(yōu)勢,面向服務(wù)器端的J2EE為當(dāng)今逐漸流行的N層體系結(jié)構(gòu)提供了一個標(biāo)準(zhǔn)的Java計算平臺:界面一致、工具簡易、豐富、Web頁面互聯(lián)便捷,從而能大大加速和簡化各種應(yīng)用系統(tǒng)的開發(fā)。3)加速后PC時代的進(jìn)程計算機(jī)的發(fā)展創(chuàng)造了Internet,但是計算機(jī)現(xiàn)在卻不是訪問Internet的唯一方式。正在出現(xiàn)的信息化、智能化的消費(fèi)類電子產(chǎn)品打破了PC作為信息終端的壟斷地位,成為人類進(jìn)入Internet的新門戶。信息終端的多元化預(yù)示著所謂后PC(post-PC)時代的到來。消費(fèi)類的信息終端量大面廣,是典型的瘦客戶機(jī),其本身的資源和能力不能與PC相比,但必須更加智能化,并對服務(wù)器端的管理提出了更高的要求。而Java平臺恰恰滿足了這種要求。本次大會推出的Kjava虛擬機(jī)能運(yùn)行在16以上的微處理器上,占用內(nèi)存少,人們可以隨心所欲,在資源有限的設(shè)備上方便地開發(fā)出各種各樣的應(yīng)用,直接運(yùn)行在不同的消費(fèi)類或其它電子設(shè)備上;而Jini的出現(xiàn)為Java網(wǎng)絡(luò)連接提供了公共標(biāo)準(zhǔn),使得任何Java設(shè)備都可以連入網(wǎng)絡(luò)中被自動識別,并可充分利用網(wǎng)絡(luò)上已有的各種資源。大力推進(jìn)Jini的發(fā)展是Sun公司加速后PC時代進(jìn)程的一項重要策略。4)應(yīng)用系統(tǒng)異彩紛呈與上屆大會一樣,展出內(nèi)容有:應(yīng)用工具、應(yīng)用系統(tǒng)、信息家電等。特別在實(shí)時系統(tǒng)開發(fā)方面,以IBM為首開發(fā)出了應(yīng)用于工業(yè)實(shí)時環(huán)境的Java嵌入系統(tǒng),展現(xiàn)出Java在工業(yè)領(lǐng)域的廣闊應(yīng)用前景。Java語言的出現(xiàn)和發(fā)展,得到了IT業(yè)界的青睞,它像一面大旗,凝聚了世界眾多的廠商與Sun公司一道,結(jié)成了對抗微軟壟斷的聯(lián)盟。許多知名廠商紛紛購買Java許可證,目前已有90多萬個軟件開發(fā)商加入了Java陣營,1億個Java最終用戶,幾千種Java應(yīng)用軟件產(chǎn)品,1500余種Java書籍(自Java問世4年來,平均每天出版一本)。這真是IT業(yè)界的盛事!IBM公司提出“高舉Java大旗,全力以赴”的口號,它在全世界的11個國家有28個實(shí)驗室,集聚了2500余名技術(shù)人員,全天侯24小時進(jìn)行全方位開發(fā);芯片巨人Intel提出“抓住時機(jī),占領(lǐng)Java陣地”!決心使Intel芯片系統(tǒng)成為開發(fā)Java應(yīng)用運(yùn)行的最佳平臺;Novell則宣稱“Java是Novell的未來,未來是服務(wù)器端Java的市場”;作為Java發(fā)明者的Sun公司,堅持“保衛(wèi)Java大旗,發(fā)展Java之路”的方針,通過對Java的“研究椘攔罈構(gòu)造棽饈詶推廣”的過程,從而占領(lǐng)市場。此外,HP、Oracle、Apple、Sybase、Netscape、Informix、3Com、Motorola等公司均是Sun的堅強(qiáng)同盟。在我國,Java的引進(jìn)與開發(fā)起步早,發(fā)展水平基本與世界同步。目前,Sun公司已在中國建成了由5個授權(quán)中心、20多個Internet/IntarnetJava解決方案中心和10所Java大學(xué)、若干培訓(xùn)中心組成的三級結(jié)構(gòu)。全面推動Java在中國的普及、應(yīng)用、研究、開發(fā),培養(yǎng)了數(shù)以十萬計的Java開發(fā)人員。此外,Sun還牽頭成立了中外軟件廠商的開發(fā)聯(lián)盟。在中國,Java的開發(fā)可以說是“人才濟(jì)濟(jì),成果累累”。如清華大學(xué)王克宏教授帶領(lǐng)的課題組面向全國,自96年開始舉辦了多期Java培訓(xùn)班和講座,開設(shè)了數(shù)期本科生、研究生Java課程,出版了“Java系列叢書”10余冊,承擔(dān)了國家“九五”攻關(guān)項目“基于Java技術(shù)的交互式遠(yuǎn)程教學(xué)系統(tǒng)”,并與日本就Java開發(fā)進(jìn)行了國際合作,成績斐然;東大阿派下屬的寶鋼東軟軟件技術(shù)研究中心是國內(nèi)是首屈一指的Java研發(fā)骨干企業(yè),該中心從95年起就開始了Java的研發(fā),目前,已掌握了PersonalJava的核心移植技術(shù),并成功地將JVM移植到汽車導(dǎo)航平臺。此外,他們還開發(fā)出支持Jini協(xié)議的即插即用網(wǎng)絡(luò)打印機(jī)軟件,以及一套Jini信息家電網(wǎng)絡(luò)的可視化演示環(huán)境,完成了基于JavaBeans的組件化軟件開發(fā)及運(yùn)行支持環(huán)境等多項成果;在臺灣,22家知名計算機(jī)公司成立了“Java聯(lián)盟”,并在臺北建立了“Java開發(fā)中心”,新竹建立了“Java語言實(shí)驗室”;在香港,舉行了全島Java杯比賽,掀起了學(xué)習(xí)Java的熱潮。Java的浪潮洶涌澎湃,席卷全球!1.2Java中任務(wù)調(diào)度以及意義在系統(tǒng)開發(fā)過程中,很多用戶的使用習(xí)慣是提交數(shù)據(jù)之后在較短時間內(nèi)可以得到系統(tǒng)的結(jié)果反饋。然而有很多任務(wù)有時需要處理大量數(shù)據(jù)和計算工作,當(dāng)用戶提交數(shù)據(jù)之后再啟動計算,不僅耗時長,而且也消耗大量系統(tǒng)資源,影響系統(tǒng)中其他用戶使用。比如應(yīng)用系統(tǒng)中的工資計算,不僅需要讀取大量的數(shù)據(jù)信息,而且經(jīng)常定時從某些外部接口導(dǎo)入數(shù)據(jù),同時經(jīng)常需要周期性計算。2Java調(diào)度機(jī)制在Java2StandardEdition里從1.3版本以后提供了java.util.Timer,java.util.TimerTask類來完成簡單的時間任務(wù)調(diào)度,并在JavaStandardEdition5.0版本里得到完善和增強(qiáng)。TimerTask類擴(kuò)展了Runnable接口,是一個抽象類。該類擴(kuò)展了Runnable接口,能在線程中執(zhí)行,具有線程執(zhí)行能力。Timer類提供了三類調(diào)度任務(wù)方式,分別為調(diào)度單次任務(wù)、一定時間間隔周期性任務(wù)、固定執(zhí)行率任務(wù)調(diào)度。第一類:單次任務(wù)調(diào)度,任務(wù)僅被調(diào)度執(zhí)行一次。schedule(TimerTasktask,longdelay)函數(shù)控制調(diào)度器在delay指定的時間長度(單位微秒)之后調(diào)度任務(wù)準(zhǔn)備執(zhí)行,而schedule(TimerTasktask,Datetime)函數(shù)控制調(diào)度器在time指定的時刻點(diǎn)調(diào)度任務(wù)進(jìn)入處理器準(zhǔn)備執(zhí)行。第二類:固定時間間隔周期調(diào)度,每隔一定時間間隔周期調(diào)度執(zhí)行任務(wù)。schedule(TimerTasktask,longdelay,longperiod)函數(shù)控制調(diào)度器在delay指定的時間長度之后開始第一次任務(wù)調(diào)度,每隔period時間長度(單位微秒)后周期性地調(diào)度執(zhí)行一次。schedule(TimerTasktask,DatefirstTime,longperiod)函數(shù)控制調(diào)度器在firstTime指定的時刻點(diǎn)開始第一次任務(wù)調(diào)度,每隔period時間長度(單位微秒)后周期性地調(diào)度執(zhí)行一次。第三類:固定執(zhí)行率調(diào)度。sheduleAtFixedRate(TimerTasktask,longdelay,longperiod)函數(shù)、scheduleAtFixedRate(TimerTasktask,DatefirstTime,longperiod)和第二類調(diào)度函數(shù)相似。不同點(diǎn)在于:任務(wù)調(diào)度以后處理器不一定馬上執(zhí)行,可能存在一定延遲。第二類調(diào)度方式是在延遲的時間之后加上period時間再調(diào)度執(zhí)行,而第三類則是從開始時間點(diǎn)計算調(diào)度時間,當(dāng)任務(wù)延遲之后調(diào)度任務(wù)在達(dá)到時間點(diǎn)后就馬上執(zhí)行。3任務(wù)調(diào)度示例下面我們將以一個周期性間隔調(diào)度執(zhí)行任務(wù)為例,講解Timer調(diào)度任務(wù)執(zhí)行。在開發(fā)應(yīng)用系統(tǒng)過程中,我們碰到一個問題:系統(tǒng)存在一個需求,要求對很多數(shù)據(jù)要進(jìn)行綜合查詢。在綜合查詢前需要把所有數(shù)據(jù)準(zhǔn)備出來,這些數(shù)據(jù)來源于一百多個表。我們把這個數(shù)據(jù)準(zhǔn)備過程寫成一個存儲過程,然后擴(kuò)展TimerTask對該存儲過程進(jìn)行調(diào)用。在Timer中對該存儲任務(wù)進(jìn)行調(diào)度執(zhí)行,讓它在午夜系統(tǒng)使用率較低的時候執(zhí)行該任務(wù)。1.3任務(wù)調(diào)度在面向?qū)ο缶幊谭椒ǖ膬?yōu)勢傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(StructuredProgramming)是一種強(qiáng)調(diào)功能抽象化和模塊化的編程方法,它把解決問題的過程看作是一個處理單位。這就是說結(jié)構(gòu)化程序設(shè)計中,模塊是對功能的抽象,而每一個模塊都是一個處理單位,并有輸入和輸出。而面向?qū)ο蟮某绦蛟O(shè)計(ObjectOrientedProgramming,OOP)是一種以對象為基礎(chǔ),以事件來驅(qū)動對象執(zhí)行的程序設(shè)計技術(shù)。OOP把計算過程看作為對象的分類過程加上其狀態(tài)變化的過程,也就是將一個應(yīng)用程序逐步劃分成相互關(guān)聯(lián)的多個對象,并且建立起與這些對象相互關(guān)聯(lián)的事件過程,通過對象對所發(fā)生的事件產(chǎn)生響應(yīng),并執(zhí)行相應(yīng)的事件過程以引發(fā)對象狀態(tài)的改變,從而最終達(dá)到完成計算的目的。與結(jié)構(gòu)化程序設(shè)計不同,面向?qū)ο蟮某绦蛟O(shè)計綜合了功能的抽象和數(shù)據(jù)的抽象,它把解決問題的過程看作是一個對象分類演繹的過程。在OOP中,對象(Object)是一個包括數(shù)據(jù)和方法(操作)的并被封裝起來的整體,它是對數(shù)據(jù)和功能的抽象和統(tǒng)一,而對象就包含了模塊的概念。面向?qū)ο笤O(shè)計是一種全新的程序設(shè)計方法,它從根本上改變了傳統(tǒng)的程序設(shè)計模式。其基本思想是:通過建立與具體實(shí)際應(yīng)用相對應(yīng)的對象,并通過這些對象的組合來創(chuàng)建具體的應(yīng)用程序。這種設(shè)計方法給程序設(shè)計帶來了許多良好特性,一般說來有以下幾點(diǎn):(1)模塊性:對象是一個功能和數(shù)據(jù)獨(dú)立的單元,它們之間只能通過對象認(rèn)可的方式來進(jìn)行通信,并可以較為自由地為其他對象所調(diào)用。(2)封裝性:這一特性為信息的隱藏提供了具體的實(shí)現(xiàn)手段,用戶不必清楚對象內(nèi)部的細(xì)節(jié),只需了解其功能即可。(3)繼承性:這一特性為代碼的共享提供了一種非常有效的方法,從而可以避免重復(fù)的代碼設(shè)計,實(shí)現(xiàn)對象的可重用性。這一特性也是面向?qū)ο蟪绦蛟O(shè)計技術(shù)最本質(zhì)的特征。(4)可靠性:對象實(shí)現(xiàn)了抽象和封裝,從而使得其中出現(xiàn)的錯誤限制在對象的內(nèi)部,因而不會向外部傳播,同時也易于檢查和維護(hù)。(5)可擴(kuò)充性:面向?qū)ο笙到y(tǒng)可以通過繼承機(jī)制不斷擴(kuò)充其對象的功能,而不會影響原系統(tǒng)的運(yùn)行。(6)連續(xù)性:雖然面向?qū)ο蟮某绦蛟O(shè)計語言在編程模式上相差很大,但它并沒有摒棄傳統(tǒng)的做法,它不僅采用了傳統(tǒng)程序設(shè)計語言的語言元素,而且利用它們來模擬建立對象,從而使得一個熟悉傳統(tǒng)程序設(shè)計語言的編程者能夠很快掌握面向?qū)ο笤O(shè)計的規(guī)律。第二章可行性分析研究系統(tǒng)的研究目標(biāo)整個軟件生命周期中,開發(fā)所占的時間和費(fèi)用都很小。后期維護(hù)工作一般要占整個生命周期的80%以上,所以系統(tǒng)分析很重要。系統(tǒng)的研究內(nèi)容1.綜述任務(wù)調(diào)度器在實(shí)際使用中的目的與功能;2.深入了解實(shí)現(xiàn)任務(wù)調(diào)度器需要的相關(guān)技術(shù);3.熟練掌握多任務(wù)之間調(diào)度的流程,加深對時間片的理解;4.深入分析設(shè)計實(shí)現(xiàn)任務(wù)調(diào)度器的關(guān)鍵技術(shù)與編寫語言。系統(tǒng)預(yù)期實(shí)現(xiàn)的功能查看任務(wù)任務(wù)在開始執(zhí)行的時候,查看正在執(zhí)行的任務(wù)。刪除任務(wù)如果任務(wù)中有一些任務(wù)不需要了,可以刪除任務(wù)添加任務(wù)在需要其他任務(wù)可以隨時添加任務(wù)。數(shù)據(jù)庫技術(shù)的現(xiàn)狀和發(fā)展數(shù)據(jù)庫技術(shù)是數(shù)據(jù)管理的最新技術(shù),是計算機(jī)科學(xué)的重要分支。十余年來,數(shù)據(jù)庫管理系統(tǒng)已從專用的應(yīng)用程序包發(fā)展成為通用的系統(tǒng)軟件。由于數(shù)據(jù)庫具有數(shù)據(jù)結(jié)構(gòu)化、最低冗余度、較高的程序與數(shù)據(jù)獨(dú)立性、易于擴(kuò)充、易于編制應(yīng)用程序等優(yōu)點(diǎn),較大的信息系統(tǒng)都是建立在數(shù)據(jù)庫設(shè)計之上的。因此,不僅大型計算機(jī)及中小型計算機(jī),甚至微型機(jī)都配有數(shù)據(jù)庫管理系統(tǒng)。數(shù)據(jù)庫是60年代末出現(xiàn)的一門計算機(jī)軟件技術(shù),到現(xiàn)在雖然只有三十多年的歷史,但在理論和時間上都得到了和很大的發(fā)展?,F(xiàn)在,數(shù)據(jù)庫是數(shù)據(jù)處理的主要工具,是管理信息系統(tǒng)(MIS)的核心部分。數(shù)據(jù)庫系統(tǒng)是當(dāng)今計算機(jī)信息系統(tǒng)的核心,是計算機(jī)技術(shù)和應(yīng)用發(fā)展的關(guān)鍵。傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)旨在處理永久、穩(wěn)定的數(shù)據(jù),強(qiáng)調(diào)維護(hù)數(shù)據(jù)的完整性和一致性。數(shù)據(jù)庫理論與技術(shù)的發(fā)展極其迅速,其應(yīng)用日益廣泛,在當(dāng)今的信息社會中,它幾乎無所不在。數(shù)據(jù)庫只是存放數(shù)據(jù)的倉庫,如何把數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)化為人們的有用信息,則必須建立數(shù)據(jù)庫系統(tǒng)。數(shù)據(jù)庫系統(tǒng)為我們提供了一種把與我們的工作和生活緊密相關(guān)的信息集合在一起的方法,它還提供了在某個集中的地方,存儲和維護(hù)這些信息的方法。數(shù)據(jù)庫系統(tǒng)主要由三大部分組成:數(shù)據(jù)庫管理系統(tǒng)(DBMS:它是專門負(fù)責(zé)組織和管理數(shù)據(jù)信息的程序)、數(shù)據(jù)庫應(yīng)用程序(它使我們能夠獲取、顯示和更新由DBMS存儲的數(shù)據(jù))、數(shù)據(jù)庫(按一定的結(jié)構(gòu)組織在一起的相關(guān)數(shù)據(jù)的集合)[2]。數(shù)據(jù)庫系統(tǒng)是計算機(jī)信息管理系統(tǒng)的最重要的組成部分之一,隨著時代的發(fā)展,數(shù)據(jù)庫技術(shù)的應(yīng)用越來越廣泛。一般來說,DBMS和數(shù)據(jù)庫應(yīng)用程序都駐留在同一臺計算機(jī)上并在同一臺計算機(jī)上運(yùn)行,很多情況下兩者甚至結(jié)合在同一個程序中,以前使用的大多數(shù)數(shù)據(jù)庫系統(tǒng)都是用這種方法設(shè)計的,但是隨著DBMS技術(shù)的發(fā)展,目前的數(shù)據(jù)庫系統(tǒng)正向客戶/服務(wù)器(B/S)模式發(fā)展??蛻?服務(wù)器數(shù)據(jù)庫將DBMS和數(shù)據(jù)庫應(yīng)用程序分開,從而提高了數(shù)據(jù)庫系統(tǒng)的處理能力。數(shù)據(jù)庫應(yīng)用程序運(yùn)行在一個或多個用戶工作站(客戶機(jī))上,并且通過網(wǎng)絡(luò)與運(yùn)行在其他計算機(jī)上(服務(wù)器)的一個或多個DBMS進(jìn)行通信[2]。2.5數(shù)據(jù)庫系統(tǒng)的選擇原則我們知道數(shù)據(jù)庫的選擇原則主要是:1.數(shù)據(jù)庫系統(tǒng)采用易于集成的,開放的技術(shù)。2.產(chǎn)品質(zhì)量優(yōu)異,可靠性高,適于長期運(yùn)行,能支持關(guān)鍵應(yīng)用。3.數(shù)據(jù)安全,保密型高。4.能提供分布式數(shù)據(jù)庫功能。5.支持多種開發(fā)環(huán)境,軟件開發(fā)容易。6.擴(kuò)充性和升級能力強(qiáng)。隨著計算機(jī)技術(shù)和軟件技術(shù)的飛速發(fā)展,數(shù)據(jù)庫產(chǎn)品日益繁多,當(dāng)前市場產(chǎn)品云集,各有特色。其中,使用java創(chuàng)建數(shù)據(jù)庫應(yīng)用程序常用到的產(chǎn)品有spring、Access、InterBase、Oracle和SQLServer2000等。而在本次的工資管理系統(tǒng)中,我主要采用的是SQLSERVER2000。MicrosoftSQLServer2000是Microsoft公司開發(fā)的大型關(guān)系數(shù)據(jù)庫。MicrosoftSQLServer2000簡稱為SQLServer2000。SQLServer2000數(shù)據(jù)庫的特點(diǎn)是,功能強(qiáng)大、使用方便、可伸縮性好、與相關(guān)組件集成度高??稍谶\(yùn)行各種Windows操作系統(tǒng)的不同機(jī)器和大型多服務(wù)器等多種平臺使用,可運(yùn)行在Windows98/NT/2000/XP等多種操作系統(tǒng)下。2.5數(shù)據(jù)庫系統(tǒng)的選擇原則 我們知道數(shù)據(jù)庫的選擇原則主要是:1.數(shù)據(jù)庫系統(tǒng)采用易于集成的,開放的技術(shù)。2.產(chǎn)品質(zhì)量優(yōu)異,可靠性高,適于長期運(yùn)行,能支持關(guān)鍵應(yīng)用。3.數(shù)據(jù)安全,保密型高。4.能提供分布式數(shù)據(jù)庫功能。5.支持多種開發(fā)環(huán)境,軟件開發(fā)容易。6.擴(kuò)充性和升級能力強(qiáng)。隨著計算機(jī)技術(shù)和軟件技術(shù)的飛速發(fā)展,數(shù)據(jù)庫產(chǎn)品日益繁多,當(dāng)前市場產(chǎn)品云集,各有特色。其中,使用java創(chuàng)建數(shù)據(jù)庫應(yīng)用程序常用到的產(chǎn)品有spring、Access、InterBase、Oracle和SQLServer2000等。而在本次的工資管理系統(tǒng)中,我主要采用的是SQLSERVER2000。MicrosoftSQLServer2000是Microsoft公司開發(fā)的大型關(guān)系數(shù)據(jù)庫。MicrosoftSQLServer2000簡稱為SQLServer2000。SQLServer2000數(shù)據(jù)庫的特點(diǎn)是,功能強(qiáng)大、使用方便、可伸縮性好、與相關(guān)組件集成度高。可在運(yùn)行各種Windows操作系統(tǒng)的不同機(jī)器和大型多服務(wù)器等多種平臺使用,可運(yùn)行在Windows98/NT/2000/XP等多種操作系統(tǒng)下。第三章任務(wù)調(diào)度的實(shí)現(xiàn)在Java應(yīng)用中,大多數(shù)任務(wù)是以一種"防止用戶長時間等待"的方式完成的。在Google搜索這樣的例子中,減少等待時間對用戶體驗來說至關(guān)重要。異步任務(wù)的一種解決方案是在用戶提交后生成一個線程(來處理異步任務(wù)),但這也不能解決那些需要以一定時間間隔重復(fù)運(yùn)行任務(wù)、或在每天的指定時間運(yùn)行任務(wù)的情況。讓我們從一個數(shù)據(jù)庫報表的例子來看看任務(wù)調(diào)度能如何幫助改善系統(tǒng)設(shè)計。報表可能是錯綜復(fù)雜的,這取決于用戶所需數(shù)據(jù)的種類,以及是否需要從一個或多個數(shù)據(jù)庫收集大量數(shù)據(jù)。用戶可能需要很長時間來運(yùn)行這樣的"按需"報表。因此,我們向這個報表示例中添加任務(wù)調(diào)度機(jī)制,以便用戶可以安排在任何他們需要的時間生成報表,并以PDF或其他格式在email中發(fā)送。用戶可以讓報表在每天的凌晨2:22,系統(tǒng)正處于低負(fù)荷時運(yùn)行;也可以選擇只在特定時間運(yùn)行一次。通過在報表應(yīng)用中加入任務(wù)調(diào)度,我們可以為產(chǎn)品添加一項有用的功能,并改善用戶體驗。幸運(yùn)的是,有一個強(qiáng)大的開源解決方案可以讓我們以標(biāo)準(zhǔn)的方式在web應(yīng)用(或任何Java應(yīng)用)中實(shí)施任務(wù)調(diào)度。以下示例展示了在web應(yīng)用中,如何使用Quartz來創(chuàng)建一個任務(wù)調(diào)度框架。這個示例還使用了StrutsActionframework插件,以便在web應(yīng)用啟動時初始化任務(wù)調(diào)度機(jī)制。Struts是最常見的MVC框架,為大多數(shù)開發(fā)人員所熟悉。當(dāng)然除此之外還有許多框架可以協(xié)助在web應(yīng)用中實(shí)現(xiàn)MVC模式。啟動時初始化任務(wù)調(diào)度器我們首先要做的是建立一個Struts插件,讓它在容器啟動時創(chuàng)建我們的任務(wù)調(diào)度器。在以下例子中,我們選擇Tomcat作為web應(yīng)用容器,不過這些示例在其他容器中也應(yīng)當(dāng)可以運(yùn)行。我們要創(chuàng)建一個Struts插件類,并在struts-config.xml中加入幾行代碼以使之可以工作。這個插件有兩個可配置的初始化參數(shù):startOnLoad指定是否要在容器啟動時立即啟動任務(wù)調(diào)度器,而startupDelay指定啟動任務(wù)調(diào)度器之前的等待時間。啟動延時很有用,因為我們可能需要首先執(zhí)行一些更重要的初始化步驟。此外還可以使用listener機(jī)制,以更復(fù)雜的方式來通知SchedulerPlugIn何時啟Scheduler。<PLUG-INclassName="SchedulerPlugIn"><SET-PROPERTYproperty="startOnLoad"value="false"/><SET-PROPERTYproperty="startupDelay"value="0"/></PLUG-IN>我們要創(chuàng)建的是一個實(shí)現(xiàn)Struts插件接口org.apache.struts.action.PlugIn的單子類SchedulerPlugIn。Struts會按照配置文件中出現(xiàn)的順序初始化各個插件。要特別注意的是init()方法中的代碼,在此我們初始化了所需的Quartz對象,并得到Scheduler。我們的任務(wù)信息就要提交到此org.quartz.Scheduler對象,后者將在隨后討論。Scheduler對象由Quartzservlet根據(jù)其配置初始化,就像Struts初始化它的ActionServlet類一樣。3.2主要內(nèi)容基本內(nèi)容某個系統(tǒng)要求通過定時任務(wù)來驅(qū)動系統(tǒng)的數(shù)據(jù)處理,因此需要該系統(tǒng)具備定時任務(wù)管理功能。當(dāng)某個定時任務(wù)被調(diào)度時,定時器將要觸發(fā)與該定時任務(wù)關(guān)聯(lián)的可執(zhí)行的程序?;疽笮枨蠓治雠c概要設(shè)計。給出各功能模塊及數(shù)據(jù)庫表概要設(shè)計。任務(wù)表編輯功能。任務(wù)表數(shù)據(jù)通過界面添加、修改、刪除??梢灾该魅蝿?wù)的定時規(guī)則:按照指定循環(huán)執(zhí)行的時間(月,天,日,時,分,秒,周)和循環(huán)次數(shù)?;疽笾灰笸瓿扇蝿?wù)類型為“過程任務(wù)”的定時任務(wù)調(diào)度。定時任務(wù)表中的數(shù)據(jù)保存在數(shù)據(jù)庫中;定時任務(wù)時間的一種表示方法:名稱類型備注月整形最大12日整形用的是24時計時法時整形分整形秒整形星期整形任務(wù)的調(diào)度功能。當(dāng)?shù)竭_(dá)某個任務(wù)約定好的時間時,調(diào)度器將調(diào)度該任務(wù),并記錄該任務(wù)的調(diào)度時間。任務(wù)可分為單任務(wù)、任務(wù)組??梢詫⒁唤M有執(zhí)行順序的任務(wù)歸為一個任務(wù)組。對于組內(nèi)有執(zhí)行順序的任務(wù),要按照標(biāo)記的執(zhí)行次序進(jìn)行;即前一任務(wù)結(jié)束,再進(jìn)行下一任務(wù)。多線程的任務(wù)調(diào)度。不同的任務(wù)或任務(wù)組應(yīng)該并行被執(zhí)行,因此對于不同的定時任務(wù),調(diào)度器需要啟動獨(dú)立的線程進(jìn)行任務(wù)的執(zhí)行。測試與代碼調(diào)優(yōu)。對各個功能模塊進(jìn)行全面的測試及代碼調(diào)優(yōu),完成測試報告。擴(kuò)展要求定時任務(wù)類型為“SQL過程”。當(dāng)?shù)竭_(dá)某個任務(wù)約定好的時間時,調(diào)度器將調(diào)度與該定時任務(wù)關(guān)聯(lián)的是一條(組)SQL語句。當(dāng)定時任務(wù)的調(diào)度規(guī)則發(fā)生變更時,調(diào)度器應(yīng)立即按新的調(diào)度規(guī)則執(zhí)行。3.3需求分析1、調(diào)度器主要的功能模塊,負(fù)責(zé)完成對任務(wù)的自動調(diào)度。要根據(jù)任務(wù)編輯器里的任務(wù)和數(shù)據(jù)庫里任務(wù)的時間進(jìn)行相應(yīng)任務(wù)的提取和調(diào)度并記下調(diào)度時間;2、任務(wù)編輯器主要完成對任務(wù)表數(shù)據(jù)通過界面添加、修改、刪除。可以指明任務(wù)的定時規(guī)則:按照指定循環(huán)執(zhí)行的時間(月,天,日,時,分,秒,周)和循環(huán)次數(shù)。3、數(shù)據(jù)庫(任務(wù)及其時間)記錄任務(wù),和時間,幫助調(diào)度器完成根據(jù)時間對任務(wù)的自動調(diào)度。4、任務(wù)組的編寫編寫需要調(diào)度的任務(wù),如:一些exe執(zhí)行文件,數(shù)據(jù)庫操作語句(要自行編寫相應(yīng)的數(shù)據(jù)庫)。3.4概要設(shè)計調(diào)度器流程圖2、模塊圖3、數(shù)據(jù)庫Task(Taskno,Tasktime,Taskpath)TaskGroup(Taskno,Tasktime,Taskpath1,Taskpath2,Taskpath3)4、任務(wù)組編寫(sql程序)填寫sql語句填寫sql語句確認(rèn)確認(rèn)添加任務(wù)添加任務(wù)第四章系統(tǒng)設(shè)計代碼主窗體主要執(zhí)行代碼/** *調(diào)度的任務(wù) */ privateList<Job>jobs=newArrayList<Job>(); /** *表格數(shù)據(jù)模型 */ privateDefaultTableModelmodel; privateTimertimer=newTimer(); /** *Launchtheapplication. */ publicstaticvoidmain(String[]args){ EventQueue.invokeLater(newRunnable(){ publicvoidrun(){ try{ MainWindowframe=newMainWindow(); frame.setVisible(true); }catch(Exceptione){ e.printStackTrace(); } } }); } /** *Createtheframe. */ publicMainWindow(){ super("Swing任務(wù)調(diào)度器"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //設(shè)置屏幕居中 Dimensiondimension=Toolkit.getDefaultToolkit().getScreenSize(); intwidth=800; intheight=500; intx=(int)((dimension.getWidth()-width)/2); inty=(int)((dimension.getHeight()-height)/2); setBounds(x,y,width,height); // contentPane=newJPanel(); contentPane.setBorder(newEmptyBorder(5,5,5,5)); contentPane.setLayout(newBorderLayout(0,0)); setContentPane(contentPane); JMenuedit=newJMenu("操作"); JMenusystem=newJMenu("系統(tǒng)"); add=newJMenuItem("添加任務(wù)"); del=newJMenuItem("刪除任務(wù)"); view=newJMenuItem("查看任務(wù)"); edit.add(add); edit.add(del); edit.add(view); add.addActionListener(newBtnActionListener(this)); del.addActionListener(newBtnActionListener(this)); view.addActionListener(newBtnActionListener(this)); exit=newJMenuItem("退出"); system.add(exit); exit.addActionListener(newBtnActionListener(this)); JMenuBarbar=newJMenuBar(); bar.add(edit); bar.add(system); setJMenuBar(bar); JPaneltop=newJPanel(); contentPane.add(top,BorderLayout.NORTH); top.setLayout(newFlowLayout(FlowLayout.CENTER,5,5)); addBtn=newJButton("添加任務(wù)"); addBtn.addActionListener(newBtnActionListener(this)); top.add(addBtn); delBtn=newJButton("刪除任務(wù)"); delBtn.addActionListener(newBtnActionListener(this)); top.add(delBtn); viewBtn=newJButton("查看任務(wù)"); viewBtn.addActionListener(newBtnActionListener(this)); top.add(viewBtn); JPanelcenter=newJPanel(); contentPane.add(center,BorderLayout.CENTER); center.setLayout(newBorderLayout(0,0)); model=newDefaultTableModel(Constants.colnums,0); table=newJTable(model); //行高度 table.setRowHeight(30); JScrollPanescrollPane=newJScrollPane(table); center.add(scrollPane,BorderLayout.CENTER); //定時任務(wù)監(jiān)控已經(jīng)完成的任務(wù),2秒鐘執(zhí)行一次 timer.schedule(newTimerTask(){ @Override publicvoidrun(){ intindex=0; for(Iterator<Job>it=jobs.iterator();it.hasNext();){ Jobj=it.next(); model.setValueAt(j.getTotalCount()-j.getCurrCount(),index,5); index++; if(j.getTotalCount()==j.getCurrCount()){ //取消執(zhí)行 j.cancel(); //從表格中刪除 JOptionPane.showMessageDialog(null,"任務(wù)["+j.getName()+"],執(zhí)行完畢!","提示信息",JOptionPane.INFORMATION_MESSAGE); //移除 it.remove(); CommonUtils.delModelByName(j.getName(),model); } } try{ SwingUtilities.invokeAndWait(newRunnable(){ @Override publicvoidrun(){ table.updateUI(); } }); }catch(Exceptione){ e.printStackTrace(); } } },0,2000); }主界面任務(wù)監(jiān)聽/***主界面時間處理*/publicclassBtnActionListenerimplementsActionListener{ privateMainWindowmainWindow; publicBtnActionListener(MainWindowmainWindow){ super(); this.mainWindow=mainWindow; } @Override publicvoidactionPerformed(ActionEvente){ if(e.getSource()==mainWindow.getAddBtn()||e.getSource()==mainWindow.getAdd()){//新增 opDialog(0,null); }elseif(e.getSource()==mainWindow.getDelBtn()||e.getSource()==mainWindow.getDel()){ intindex=mainWindow.getTable().getSelectedRow(); if(index==-1){//刪除 JOptionPane.showMessageDialog(null,"請選擇要刪除的任務(wù)!","錯誤信息",JOptionPane.ERROR_MESSAGE); }else{ Vector<String>vector=(Vector<String>)mainWindow.getModel().getDataVector().get(index); mainWindow.getModel().getDataVector().remove(index); mainWindow.getTable().updateUI(); //取消選中 mainWindow.getTable().clearSelection(); //移除任務(wù)隊列中的數(shù)據(jù) CommonUtils.removeFromJobList(mainWindow.getJobs(),vector.get(0)); } }elseif(e.getSource()==mainWindow.getViewBtn()||e.getSource()==mainWindow.getView()){//查看 intindex=mainWindow.getTable().getSelectedRow(); if(index==-1){ JOptionPane.showMessageDialog(null,"請選擇要查看的任務(wù)!","錯誤信息",JOptionPane.ERROR_MESSAGE); }else{ Vector<String>vector=(Vector<String>)mainWindow.getModel().getDataVector().get(index); Stringname=vector.get(0); Jobjob=CommonUtils.getJobByName(mainWindow.getJobs(),name); opDialog(1,job); } }elseif(e.getSource()==mainWindow.getExit()){//退出 System.exit(0); } } /** *打開對話框0:add,1:查看 * *@paramtype */ privatevoidopDialog(inttype,Jobj){ ManagerDialogdialog=newManagerDialog(mainWindow,type,j); dialog.setModal(true); dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); dialog.setVisible(true); }}刪除任務(wù)調(diào)度中的數(shù)據(jù) /** *刪除表格中指定的數(shù)據(jù) * *@paramname */ publicstaticvoiddelModelByName(Stringname,DefaultTableModelmodel){ @SuppressWarnings("unchecked") Vector<Object>vector=model.getDataVector(); for(Iterator<Object>it=vector.iterator();it.hasNext();){ Vector<String>tmp=(Vector<String>)it.next(); if(tmp.get(0).equals(name)){ it.remove(); } } } /** *移除數(shù)據(jù) * *@paramjobs */ publicstaticvoidremoveFromJobList(List<Job>jobs,Stringname){ for(Iterator<Job>it=jobs.iterator();it.hasNext();){ Jobj=it.next(); if(j.getName().equals(name)){ //停止任務(wù) j.cancel(); it.remove(); } } } /** *根據(jù)任務(wù)名稱獲取Job * *@paramjobs *@paramname *@return */ publicstaticJobgetJobByName(List<Job>jobs,Stringname){ for(Iterator<Job>it=jobs.iterator();it.hasNext();){ Jobj=it.next(); if(j.getName().equals(name)){ returnj; } } returnnull; } /** *字符串轉(zhuǎn)換成日期 * *@paramstr *@return *@throwsParseException */ publicstaticDateparseStringToDate(Stringstr)throwsParseException{ SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); returndateFormat.parse(str); } publicstaticStringparseDateToString(Datedate){ SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); returndateFormat.format(date); }}第五章系統(tǒng)測試軟件測試是軟件開發(fā)過程的重要組成部分,是用來確認(rèn)一個程序的品質(zhì)或性能是否符合開發(fā)之前所提出的一些要求。軟件測試的目的,第一是確認(rèn)軟件的質(zhì)量,其一方面是確認(rèn)軟件做了你所期望的事情,另一方面是確認(rèn)軟件以正確的方式來做了這個事件。第二是提供信息,比如提供給開發(fā)人員或程序經(jīng)理的反饋信息,為風(fēng)險評估所準(zhǔn)備的信息。第三軟件測試不僅是在測試軟件產(chǎn)品的本身,而且還包括軟件開發(fā)的過程。如果一個軟件產(chǎn)品開發(fā)完成之后發(fā)現(xiàn)了很多問題,這說明此軟件開發(fā)過程很可能是有缺陷的。因此軟件測試的第三個目的是保證整個軟件開發(fā)過程是高質(zhì)量的。軟件質(zhì)量是由幾個方面來衡量的:一、在正確的時間用正確的的方法把一個工作做正確。二、符合一些應(yīng)用標(biāo)準(zhǔn)的要求,比如不同國家的用戶不同的操作習(xí)慣和要求,項目工程中的可維護(hù)性、可測試性等要求。三、質(zhì)量本身就是軟件達(dá)到了最開始所設(shè)定的要求,而代碼的優(yōu)美或精巧的技巧并不代表軟件的高質(zhì)量。四、質(zhì)量也代表著它符合客戶的需要。做軟件測試,最重要的一件事就是從客戶的需求出發(fā),從客戶的角度去看產(chǎn)品,客戶會怎么去使用這個產(chǎn)品,使用過程中會遇到什么樣的問題。只有這些問題都解決了,軟件產(chǎn)品的質(zhì)量才可以說是上去了。 5.2測試計劃測試計劃是測試人員管理測試項目,在軟件中尋找Bug的一種有效的工具。測試計劃主要有兩個作用:一是評判團(tuán)隊的測試覆蓋率以及效率,讓測試工作很有條理的逐步展開;二是有利于與項目經(jīng)理、開發(fā)人員進(jìn)行溝通。有了測試計劃之后,他們就能夠知道你是如何開展測試工作的,他們也會從中提出很多有益的意見,確保測試工作順利進(jìn)行??傊辛藴y試計劃可以更好的完成測試工作,確保用戶的滿意度。對本系統(tǒng)進(jìn)行有效性測試,運(yùn)用黑盒測試的方法,驗證系統(tǒng)是否滿足需求規(guī)格說明書列出的需求。主要是對各個窗體的進(jìn)行單元測試

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論