基于java的電話管理模塊貪吃蛇游戲程序_第1頁
基于java的電話管理模塊貪吃蛇游戲程序_第2頁
基于java的電話管理模塊貪吃蛇游戲程序_第3頁
基于java的電話管理模塊貪吃蛇游戲程序_第4頁
基于java的電話管理模塊貪吃蛇游戲程序_第5頁
已閱讀5頁,還剩59頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、湖 南 科 技 大 學畢 業 設 計( 論 文 )題目基于JAVA的電話管理系統的設計作者 學院 信息與電氣工程學院專業 通信工程學號 指導教師 唐東峰二一一 年 六月 一日湖 南 科 技 大 學畢業設計(論文)任務書 院 系(教研室)系(教研室)主任: (簽名) 年 月 日學生姓名: 學號: 專業: 1 設計(論文)題目及專題: 2 學生設計(論文)時間:自 年 月 日開始至 年 月 日止3 設計(論文)所用資源和參考資料:4 設計(論文)應完成的主要內容:5 提交設計(論文)形式(設計說明與圖紙或論文等)及要求:6 發題時間: 年 月 日指導教師: (簽名)學 生: (簽名)湖 南 科 技

2、 大 學畢業設計(論文)指導人評語主要對學生畢業設計(論文)的工作態度,研究內容與方法,工作量,文獻應用,創新性,實用性,科學性,文本(圖紙)規范程度,存在的不足等進行綜合評價指導人: (簽名)年 月 日 指導人評定成績: 湖 南 科 技 大 學畢業設計(論文)評閱人評語主要對學生畢業設計(論文)的文本格式、圖紙規范程度,工作量,研究內容與方法,實用性與科學性,結論和存在的不足等進行綜合評價評閱人: (簽名)年 月 日 評閱人評定成績: 摘要 隨著信息化時代的發展,通信市場的逐步擴大,電話、手機等通信設備已經離不開人們的生活,這時如何對日常的電話進行有序、合理的管理顯得尤為重要。本文設計的是基

3、于JAVA語言設計的一個電話管理系統。本系統將通話記錄存放在文本文件中,讀取記錄時從文件中將記錄反序列化成存放記錄的容器Vector對象,寫入記錄時將存儲記錄的Vector對象序列化存入文本文件。手機的模擬界面利用JAVA UI進行設計,由于手機的通信過程難以實現,本系統通過Socket網絡編程模擬實現,將手機等通信終端當成客戶端,中間的通信過程通過服務器模擬實現,通過服務器作為橋梁實現客戶端與客戶端的通信。本系統能實時對已接來電、未接來電、已撥電話進行記錄,而且能對記錄下來的電話進行再次呼叫,用戶對來電可以進行模擬的接通或掛斷操作。 【關鍵詞】客戶端 服務器 Socket網絡編程 Vecto

4、r 多線程ABSTRACT With the development of the Network Technology and the gradual expansion of communication market, communication equipments like telephone, mobile phone have been inseparable from peoples lives.Therefore, orderly and rational management of our daily telephone is particularly important .

5、 What we design in this article is a telephone management system based on the JAVA language . The information of call records in this system stored in text files.When the system reads the records from the file,the information of those files will be deserialized into a Vector object storing records.W

6、hen the system writtens records ,Vector object storing records will be serialized into text files. Analog of phone s interface designed by JAVA UI . Because the communication process of phones is difficult to achieve , the system achieved it by simulation Socket Network Programming. Mobile phones an

7、d other communication terminals are regarded as the client, the communication process in the middle of clients is achieved through the server .The system achieves the communications between clients by the server who plays as a bridge . The system can received calls, missed calls, dialed calls record

8、ed at real-time, and the telephones received can be called again . In addition ,the users can carry out operations like connecting to someone or hanging up the call. Keywords: client server Socket network programming Vector multi-threaded 目 錄TOC o 1-8 h u HYPERLINK l _Toc15780 第一章 緒論 PAGEREF _Toc157

9、80 1 HYPERLINK l _Toc10996 1.1課題研究背景和意義 PAGEREF _Toc10996 1 HYPERLINK l _Toc7148 1.2 研究目標 PAGEREF _Toc7148 1 HYPERLINK l _Toc25336 1.3 研究內容 PAGEREF _Toc25336 1 HYPERLINK l _Toc12778 第二章 開發環境及相關原理介紹 PAGEREF _Toc12778 3 HYPERLINK l _Toc17157 2.1 JDK(Java Development Kit) PAGEREF _Toc17157 3 HYPERLINK

10、l _Toc5967 2.1.1 JDK基本組件 PAGEREF _Toc5967 3 HYPERLINK l _Toc16207 2.1.2JDK常用包 PAGEREF _Toc16207 3 HYPERLINK l _Toc26021 2.3 java圖形界面 PAGEREF _Toc26021 4 HYPERLINK l _Toc12502 2.3.1 Swing 的角色 PAGEREF _Toc12502 4 HYPERLINK l _Toc2332 2.3.2 JComponent PAGEREF _Toc2332 4 HYPERLINK l _Toc13678 2.3.3 JBut

11、ton PAGEREF _Toc13678 5 HYPERLINK l _Toc10487 2.3.4 JFrame PAGEREF _Toc10487 5 HYPERLINK l _Toc23821 2.3.5 JTextArea PAGEREF _Toc23821 6 HYPERLINK l _Toc27693 2.3.6 JList PAGEREF _Toc27693 6 HYPERLINK l _Toc30293 2.3.7 BorderLayout PAGEREF _Toc30293 7 HYPERLINK l _Toc17460 2.4 Java 多線程 PAGEREF _Toc1

12、7460 7 HYPERLINK l _Toc7358 2.4.1多線程概念 PAGEREF _Toc7358 7 HYPERLINK l _Toc30489 2.4.2 在Java中實現多線程 PAGEREF _Toc30489 8 HYPERLINK l _Toc31952 2.5 java socket編程 PAGEREF _Toc31952 9 HYPERLINK l _Toc11079 2.5.1網絡編程中兩個主要的問題 PAGEREF _Toc11079 9 HYPERLINK l _Toc10045 2.5.2兩類傳輸協議:TCP;UDP PAGEREF _Toc10045 9

13、HYPERLINK l _Toc2742 2.5.3 Socket概念 PAGEREF _Toc2742 10 HYPERLINK l _Toc20973 2.5.4 Socket通訊的過程 PAGEREF _Toc20973 10 HYPERLINK l _Toc82 2.5.5創建Socket PAGEREF _Toc82 10 HYPERLINK l _Toc7729 2.6 Vector 類 PAGEREF _Toc7729 12 HYPERLINK l _Toc27100 2.6.1 在JAVA中的詳細說明 PAGEREF _Toc27100 12 HYPERLINK l _Toc3

14、0131 2.6.2插入功能 PAGEREF _Toc30131 13 HYPERLINK l _Toc10645 2.6.3刪除功能 PAGEREF _Toc10645 13 HYPERLINK l _Toc23530 2.6.4查詢搜索功能 PAGEREF _Toc23530 13 HYPERLINK l _Toc7788 2.7 Java中對象的序列化與反序列化 PAGEREF _Toc7788 14 HYPERLINK l _Toc16401 2.7.1 序列化簡介 PAGEREF _Toc16401 14 HYPERLINK l _Toc32401 2.7.2序列化機制 PAGERE

15、F _Toc32401 14 HYPERLINK l _Toc31733 2.7.3 處理對象流:(序列化過程和反序列化過程) PAGEREF _Toc31733 15 HYPERLINK l _Toc12177 2.7.4 定制序列化過程 PAGEREF _Toc12177 15 HYPERLINK l _Toc19989 2.7.5 完全定制序列化過程 PAGEREF _Toc19989 16 HYPERLINK l _Toc20589 第三章 需求分析及可行性研究 PAGEREF _Toc20589 17 HYPERLINK l _Toc3398 3.1系統需求分析 PAGEREF _T

16、oc3398 17 HYPERLINK l _Toc20319 3.1.1 功能需求 PAGEREF _Toc20319 17 HYPERLINK l _Toc20888 3.1.2 性能需求 PAGEREF _Toc20888 17 HYPERLINK l _Toc17043 3.2 數據流圖 PAGEREF _Toc17043 18 HYPERLINK l _Toc21785 3.2.1 總體數據流圖 PAGEREF _Toc21785 18 HYPERLINK l _Toc18388 3.2.2具體數據流圖 PAGEREF _Toc18388 18 HYPERLINK l _Toc836

17、8 3.3 系統可行性研究 PAGEREF _Toc8368 19 HYPERLINK l _Toc13089 3.3.1 經濟可行性 PAGEREF _Toc13089 19 HYPERLINK l _Toc21550 3.3.2技術可行性 PAGEREF _Toc21550 19 HYPERLINK l _Toc6551 3.3.3運行可行性 PAGEREF _Toc6551 19 HYPERLINK l _Toc31395 3.3.4操作可行性 PAGEREF _Toc31395 19 HYPERLINK l _Toc732 第四章 總體設計 PAGEREF _Toc732 20 HYP

18、ERLINK l _Toc27270 4.1 系統總體結構體系 PAGEREF _Toc27270 20 HYPERLINK l _Toc27445 4.2 圖形界面模塊 PAGEREF _Toc27445 20 HYPERLINK l _Toc22548 4.3 數據讀寫模塊 PAGEREF _Toc22548 21 HYPERLINK l _Toc17129 4.4 通信模塊 PAGEREF _Toc17129 21 HYPERLINK l _Toc13185 第五章 詳細設計及實現 PAGEREF _Toc13185 23 HYPERLINK l _Toc15903 5.1 系統總體流程

19、圖 PAGEREF _Toc15903 23 HYPERLINK l _Toc31232 5.2 界面的具體實現 PAGEREF _Toc31232 24 HYPERLINK l _Toc8289 5.2.1 java事件處理 PAGEREF _Toc8289 24 HYPERLINK l _Toc6050 5.2.2 主要的界面類 PAGEREF _Toc6050 26 HYPERLINK l _Toc18782 5.2.3手機鍵盤的封裝類keyboardPanel PAGEREF _Toc18782 26 HYPERLINK l _Toc10657 5.2.4 已接來電、未接來電、已撥電話

20、的界面 PAGEREF _Toc10657 27 HYPERLINK l _Toc13480 5.2.5 撥號輸入界面的實現 PAGEREF _Toc13480 28 HYPERLINK l _Toc11155 5.2.6 界面切換流程 PAGEREF _Toc11155 28 HYPERLINK l _Toc27778 5.3 數據讀寫模塊 PAGEREF _Toc27778 29 HYPERLINK l _Toc12178 5.3.1 通話記錄的讀寫 PAGEREF _Toc12178 29 HYPERLINK l _Toc12282 5.3.2 客戶端與服務器之間的數據讀寫 PAGERE

21、F _Toc12282 30 HYPERLINK l _Toc105 5.3.3序列化與反序列化的具體實現 PAGEREF _Toc105 31 HYPERLINK l _Toc20187 5.3.4 Vector類 PAGEREF _Toc20187 32 HYPERLINK l _Toc17973 5.4網絡通信的實現 PAGEREF _Toc17973 33 HYPERLINK l _Toc4678 5.4.1登錄離線過程的具體實現 PAGEREF _Toc4678 33 HYPERLINK l _Toc18728 5.4.2 模擬客戶端之間通話過程的具體實現 PAGEREF _Toc1

22、8728 34 HYPERLINK l _Toc32492 第六章 程序測試和結果分析 PAGEREF _Toc32492 35 HYPERLINK l _Toc2898 6.1 模塊測試 PAGEREF _Toc2898 35 HYPERLINK l _Toc26176 6.2 功能測試 PAGEREF _Toc26176 35 HYPERLINK l _Toc31114 6.3 測試結果 PAGEREF _Toc31114 36 HYPERLINK l _Toc9757 6.4 個人總結 PAGEREF _Toc9757 38 HYPERLINK l _Toc13568 參考文獻 PAGE

23、REF _Toc13568 40致謝41 HYPERLINK l _Toc12978 附錄A PAGEREF _Toc12978 42 HYPERLINK l _Toc16892 1.鍵盤封裝類KeyboardPanel()42 HYPERLINK l _Toc9392 2.通話界面程序CallingUi() PAGEREF _Toc9392 44 HYPERLINK l _Toc3529 3.客戶端啟動程序phoneClient() PAGEREF _Toc3529 47 HYPERLINK l _Toc5650 4.服務器啟動程序server() PAGEREF _Toc5650 50 H

24、YPERLINK l _Toc3306 5.服務器和客戶端建立連接后的響應程序Connection() PAGEREF _Toc3306 51第一章 緒論1.1課題研究背景和意義 回顧我國移動電話10多年的發展歷程,我國移動通信市場的發展速度和規模令世人矚目,中國的移動電話發展史是超常規、成倍數、跳躍式的發展史。自1987年中國電信開始開辦移動電話業務以來到1993年用戶增長速度均在200%以上,從1994年移動用戶規模超過百萬大關,移動電話用戶數每年幾乎比前一年翻一番。1997年7月17日,我國移動電話第1000萬個用戶在江蘇南京誕生,標志著我國移動通信又上了一個臺階,它意味著中國移動電話用

25、不到10年時間所發展的用戶數超過了固定電話110年的發展歷程。2001年8月,中國的移動通信用戶數超過了1.2億,已超過美國躍居為世界第一位。2003年6月底移動電話用戶總數已達2.3447億戶。目前我國移動通信網的增長速度名列世界第一位,移動用戶總數躍居世界第一位。 中國信息產業部最新統計顯示, 由于手機資費近年來的大幅下降,手機用戶數進入高增長期,截至2007年末,中國手機普及率已達41.6%。 截至07年12月,全國手機用戶數約達5.47億戶,普及率達41.6,截止09年12月份,全行業手機用戶數共達到7.26億戶,其中,中國移動用戶總數達到5.22億戶,中國聯通用戶數升至1.476億,

26、中國電信則達到5609萬戶。移動電話的迅猛增長以及手機的廣泛普及,必然的導致用戶的增加,因此如何對日常的電話進行有序、合理的管理顯得尤為重要。1.2 研究目標 本課題主要研究如何對手機客戶端的通話記錄進行管理,能實時的對已接,未接,已撥電話進行記錄,并能進行自主的刪除。同時還要利用文件操作的方式將記錄保存,從而保證每次開關機都不會遺失通話記錄。手機界面的模擬利用Java中的Swing和awt包。另外,具體的通信過程通過java Socket網絡編程模擬。1.3 研究內容 本課題主要利用Java較為常用的技術,如UI圖形界面、Socket編程、文件流操作、容器Vector、序列化反序列化等。主要

27、模塊有圖形界面模塊,數據讀寫模塊,網絡通信模塊。具體的研究內容包括:1.利用Java UI知識畫出一個簡單的手機模擬器,能實現手機撥打電話和查詢通話記錄的功能,全部操作通過手機模擬器上的鍵盤完成,并能進行手機相應操作界面的切換。2.手機的查詢記錄功能,通過讀取文件到相應JList列表顯示出來,并能對記錄進行刪除操作。同時,能實時的對已接,未接,已撥電話進行記錄。3.手機的通信過程通過Socket網絡通信模擬,將手機終端看做客服端,基站及中間過程通過服務器實現,通過服務器作為橋梁實現客戶端與客戶端的通信。 第二章 開發環境及相關原理介紹2.1 JDK(Java Development Kit)J

28、DK(Java Development Kit)是Sun Microsystems針對Java開發員的產品。自從Java推出以來,JDK已經成為使用最廣泛的Java SDK。JDK 是整個Java的核心,包括了Java運行環境,Java工具和Java基礎的類庫。JDK是學好Java的第一步。而專門運行在x86平臺的Jrocket在服務端運行效率也要比Sun JDK好很多。從SUN的JDK5.0開始,提供了泛型等非常實用的功能,其版本也不斷更新,運行效率得到了非常大的提高。 JDK基本組件 javac 編譯器,將源程序轉成字節碼 jar 打包工具,將相關的類文件打包成一個文件 javadoc 文

29、檔生成器,從源碼注釋中提取文檔 jdb debugger,查錯工具 java 運行編譯后的java程序(.class后綴的) Javap:Java反匯編器,顯示編譯類文件中的可訪問功能和數據,同時顯示 字節代碼含義。2.1.2JDK常用包 java.lang: 這個是系統的基礎類,比如String等都是這里面的,這個包是唯一一個可 以不用引入(import)就可以使用的包 java.io: 這里面是所有輸入輸出有關的類,比如文件操作等 java.awt:抽象窗口工具,用于圖形界面的包 Java.awt.event:用于相應事件的處理 Java.swing:新增的圖形界面的包 : 這里面是與網絡

30、有關的類,比如URL,URLConnection等。 java.util : 這個是系統輔助類,特別是集合類Collection,List,Map等。 2.2 eclipse eclipse-galileoEclipse 是一個開放源代碼的、基于 Java 的可擴展開發平臺。就其本身而言,它只是一個框架和一組服務,用于通過插件組件構建開發環境。幸運的是,Eclipse 附帶了一個標準的插件集,包括 Java 開發工具(Java Development Tools,JDT)。 Eclipse是著名的跨平臺的自由集成開發環境(IDE)。最初主要用來Java語言開發,但是目前亦有人通過插件使其作為其

31、他計算機語言比如C+和Python的開發工具。Eclipse的本身只是一個框架平臺,但是眾多插件的支持使得Eclipse擁有其他功能相對固定的IDE軟件很難具有的靈活性。許多軟件開發商以Eclipse為框架開發自己的IDE。 基于 Eclipse 的應用程序的突出例子是 IBM 的 WebSphere Studio Workbench,它構成了 IBM Java 開發工具系列的基礎。例如,WebSphere Studio Application Developer 添加了對 JSP、servlet、EJB、XML、Web 服務和數據庫訪問的支持。 Eclipse的主要組成 Eclipse是一個

32、開放源代碼的軟件開發項目,專注于為高度集成的工具開發提供一個全功能的、具有商業品質的工業平臺。它主要由Eclipse項目、Eclipse工具項目和Eclipse技術項目三個項目組成,具體包括四個部分組成Eclipse Platform、JDT、CDT和PDE.JDT支持Java開發、CDT支持C開發、PDE用來支持插件開發,Eclipse Platform則是一個開放的可擴展IDE,提供了一個通用的開發平臺。它提供建造塊和構造并運行集成軟件開發工具的基礎。Eclipse Platform允許工具建造者獨立開發與他人工具無縫集成的工具從而無須分辨一個工具功能在哪里結束,而另一個工具功能在哪里開始

33、。 Eclipse SDK(軟件開發者包)是Eclipse Platform、JDT和PDE所生產的組件合并,它們可以一次下載。這些部分在一起提供了一個具有豐富特性的開發環境,允許開發者有效地建造可以無縫集成到Eclipse Platform中的工具。Eclipse SDK由Eclipse項目生產的工具和來自其它開放源代碼的第三方軟件組合而成。Eclipse項目生產的軟件以 CPL發布,第三方組件有各自自身的許可協議.2.3 java圖形界面 Swing 的角色 Swing 是 Java 平臺的 UI 它充當處理用戶和計算機之間全部交互的軟件。它實際上充當用戶和計算機內部之間的中間人。它提供了

34、處理前面一節中描述的 UI 各方面內容的機制:鍵盤:Swing 提供了捕捉用戶輸入的方法。 顏色:Swing 提供改變在屏幕上看到的顏色的方法。 打字的地址欄:Swing 提供了文本組件,處理所有普通任務。 音量:Swing 不太擅長。 JComponent Swing 的整個可視組件庫的基礎構造塊是 JComponent。它是所有組件的父類。它是一個抽象類,所以不能創建 JComponent,但是作為類層次結構的結果,從字面意義來說它包含了數百個函數,Swing 中的每個組件都可以使用這些函數。顯然,有些概念要比其他概念重要,所以對于本教程,需要學習的重要的東西是:JComponent 不僅

35、是 Swing 組件的基類,還是定制組件的基類。它為所有組件提供了繪制的基礎架構 一些方便進行組件定制的東西。它知道如何處理所有的鍵盤按鍵。所以類只需要偵聽特定的鍵。 它包含 add() 方法,可以添加其他 JComponent。換種方式來看,可以把任意 Swing 組件添加到其他任何 Swing 組件,從而構造嵌套組件(例如,JPanel 包含 JButton,甚至包含一些古怪的組合,例如 JMenu 包含 JButton)。 JButton Swing 中的基本動作組件 JButton,是與每個窗口中都能看到的 OK 和Cancel 一樣的按鈕;這些按鈕所做的正是在單擊它們之后,將發生一些

36、事情。 用來改變 JButton 屬性的方法與 JLabel 的方法類似。它們控制文本、圖片和方向:get/setText(): 獲取/設置標簽的文本。 get/seticon(): 獲取/設置標簽的圖片。 get/setHorizontalAlignment(): 獲取/設置文本的水平位置。 get/setVerticalAlignment(): 獲取/設置文本的垂直位置。 get/setDisplayedMnemonic(): 獲取/設置訪問鍵(下劃線字符),與 Alt 按鈕組合時,造成按鈕單擊。 JFrame JFrame 類就是做這個的它是一個容器,允許您把其他組件添加到它里面,把它們

37、組織起來,并把它們呈現給用戶。JFrame 實際上不僅僅讓您把組件放入其中并呈現給用戶。比起它表面上的簡單性,它實際上是 Swing 包中最復雜的組件。為了最大程度地簡化組件,在獨立于操作系統的 Swing 組件與實際運行這些組件的操作系統之間,JFrame 起著橋梁的作用。JFrame 在本機操作系統中是以窗口的形式注冊的,這么做之后,就可以得到許多熟悉的操作系統窗口的特性:最小化/最大化、改變大小、移動。可以在 JFrame 上調用的一些修改屬性的方法是:get/setTitle(): 獲取/設置幀的標題。 get/setState(): 獲取/設置幀的最小化、最大化等狀態。 is/set

38、Visible(): 獲取/設置幀的可視狀態,換句話說,是否在屏幕上顯示。 get/setLocation(): 獲取/設置幀在屏幕上應當出現的位置。 get/setsize(): 獲取/設置幀的大小。 add(): 將組件添加到幀中。 JTextArea JTextArea 支持多行文本。可以把它想像成一個空白頁,可以在其中的任意地方進行輸入。JTextArea可以在其中輸入內容,另外JTextArea 提供了一些額外的重要功能,這些功能包括單詞自動換行的能力(即把長文本自動換行到下一行,而不是將單詞從中斷開)、對文本自動換行的能力(即把長的文本行移動到下一行,而不是創建一個需要水平滾動條的

39、非常長的行)。 支持行和單詞的自動換行的重要方法是:is/setLineWrap():設置在行過長的時候是否要自動換行。 is/setWrapStyleWord():設置在單詞過長的時候是否要把長單詞移到下一行。 JList JList 是一個有用的組件,用于向用戶呈現許多選擇。可以把它當作 JComboBox 的擴展。JList 提供了更多選擇,并添加了多選的能力。在 JList 與 JComboBox 之間進行選擇通常取決于以下兩個特性:如果需要多選,或者選擇的選項超過 15 個(雖然這個數字并不是通用規則),那么就應當選擇 JList。應用將 JList 與 JScrollPane 結合

40、使用,因為它能夠呈現比它的空間所能容納的更多的選項。 JList 包含選擇模型的概念(在 JTable 中也會看到),在這里,可以設置 JList 接受不同類型的選擇。這些類型是:單一選擇(只能選擇一項)、單一間隔選擇(只能選擇相鄰選項),以及任意多項或者多項間隔選擇(可以選擇任意數量、任意組合的選擇)。 JList 中有許多處理數據的函數,而且根據我的說法,這些也只不過是使用 JList 的細節的皮毛而已。以下是一些基本方法:get/setSelectedIndex():獲取/設置列表中選中的行;在多選擇列表的情況下,返回一個 int。 get/setSelectionMode():與上面解

41、釋的一樣,獲取/設置選擇模式,模式有:單一、單一間隔和多選間隔。 setListData():設置在 JList 中使用的數據。 get/setSelectedValue():獲得選中的對象(與選中行號對應)。 BorderLayoutBordderLayout是容器Frame和Dialog默認的布局管理器,它把容器簡單地劃分為東、西、南、北、中五個區域,每加入一個組件都應該指明把這個組件加在哪個區域。分布在北部和南部區域的組件將橫向擴展至 占據整個容器的長度,分布在東部和西部的組件將伸展至占據容器剩余部分的全部寬度,最后剩余部分將分配給中央的組件。如果某個區間沒有分配組件,則其它組件可以占據

42、它的空間。例如,如果北部沒有分配組件,則西部 和東部的組件將擴展到容器的上方,如果西部和東部沒有分配組件,則位于中央的組件將橫向擴展到容器的左右邊界。BorderLayout的構造方法有兩種 BorderLayout();BorderLayout(int hgap,int vgap);hgap及vgap指組件間的間距,默認為0個像素 GridLayoutGridLayout是使用最多的布局管理器,其基本布局策略是把容器的空間劃分成若干行若干列的網格區域,組件就位于這些 劃分出來的小格中.GridLayout比較靈活,劃分多少網格由程序自由控制,而且組件定位也精確. 使用GridLayout布局

43、布局管理器的一般步驟如下: (1)創建GridLayout對象作為布局管理器.指定劃分網格的行數和列數,并使用容器的setLayout()方法為容器設置這個 布局管理器: setLayout(new GridLayout(行數,列數組) (2)調用容器的方法add()將組件加入容器.組件填入容器的順序將按照第一行第一個、第一行第二個,以此類推,最后一行最后一個。 每網格中都必須填入組件,如果希望某個網格為空白,可以為它加入一個空的標簽add(new Label()2.4 Java 多線程多線程概念多線程是這樣一種機制,它允許在程序中并發執行多個指令流,每個指令流都稱為一個線程,彼此間互相獨立。

44、 線程又稱為輕量級進程,它和進程一樣擁有獨立的執行控制,由操作系統負責調度,區別在于線程沒有獨立的存儲空間,而是和所屬進程中的其它線程共享一個存儲空間,這使得線程間的通信遠較進程簡單。 多個線程的執行是并發的,也就是在邏輯上“同時”,而不管是否是物理上的“同時”。如果系統只有一個CPU,那么真正的“同時”是不可能的,但是由于CPU的速度非常快,用戶感覺不到其中的區別,因此我們也不用關心它,只需要設想各個線程是同時執行即可。多線程和傳統的單線程在程序設計上最大的區別在于,由于各個線程的控制流彼此獨立,使得各個線程之間的代碼是亂序執行的。 圖 多線程 在Java中實現多線程 作為一個完全面向對象的

45、語言,Java提供了類 java.lang.Thread 來方便多線程編程,這個類提供了大量的方法來方便自己的各個線程。Thread 類最重要的方法是 run() ,它為Thread 類的方法 start() 所調用,提供的線程所要執行的代碼。為了指定我們自己的代碼,只需要覆蓋它。方法一:繼承 Thread 類,覆蓋方法 run()。我們在創建的 Thread 類的子類中重寫 run() ,加入線程所要執行的代碼即可。它也有一個很大的缺點,那就是如果類已經從一個類繼承(如小程序必須繼承自 Applet 類),則無法再繼承 Thread 類。方法二:實現 Runnable 接口Runnable

46、接口只有一個方法 run(),聲明自己的類實現 Runnable 接口并提供這一方法,將線程代碼寫入其中,就完成了這一部分的任務。但是 Runnable 接口并沒有任何對線程的支持,還必須創建 Thread 類的實例,這一點通過 Thread 類的構造函數public Thread(Runnable target)來實現。 線程的四種狀態1. 新狀態:線程已被創建但尚未執行(start() 尚未被調用)。2. 可執行狀態:線程可以執行,雖然不一定正在執行。CPU 時間隨時可能被分配給該線程,從而使得它執行。3. 死亡狀態:正常情況下 run() 返回使得線程死亡。調用 stop()或 dest

47、roy() 亦有同樣效果,但是不被推薦,前者會產生異常,后者是強制終止,不會釋放鎖。4. 阻塞狀態:線程不會被分配 CPU 時間,無法執行。線程的優先級 線程的優先級代表該線程的重要程度,當有多個線程同時處于可執行狀態并等待獲得 CPU 時間時,線程調度系統根據各個線程的優先級來決定給誰分配 CPU 時間,優先級高的線程有更大的機會獲得 CPU 時間,優先級低的線程也不是沒有機會,只是機會要小一些罷了。可以調用 Thread 類的方法 getPriority() 和 setPriority()來存取線程的優先級,線程的優先級界于1(MIN_PRIORITY)和10(MAX_PRIORITY)之

48、間,缺省是5(NORM_PRIORITY)。2.5 java socket編程網絡編程中兩個主要的問題 一個是如何準確的定位網絡上一臺或多臺主機,另一個就是找到主機后如何可靠高效的進行數據傳輸。 在TCP/IP協議中IP層主要負責網絡主機的定位,數據傳輸的路由,由IP地址可以唯一地確定Internet上的一臺主機。而TCP層則提供面向應用的可靠(tcp)的或非可靠(UDP)的數據傳輸機制,這是網絡編程的主要對象,一般不需要關心IP層是如何處理數據的。 目前較為流行的網絡編程模型是客戶機/服務器(C/S)結構。即通信雙方一方作為服務器等待客戶提出請求并予以響應。客戶則在需要服務時向服務器提 出申

49、請。服務器一般作為守護進程始終運行,監聽網絡端口,一旦有客戶請求,就會啟動一個服務進程來響應該客戶,同時自己繼續監聽服務端口,使后來的客戶也 能及時得到服務。兩類傳輸協議:TCP;UDPTCP是Tranfer Control Protocol的 簡稱,是一種面向連接的保證可靠傳輸的協議。通過TCP協議傳輸,得到的是一個順序的無差錯的數據流。發送方和接收方的成對的兩個socket之間必須建 立連接,以便在TCP協議的基礎上進行通信,當一個socket(通常都是server socket)等待建立連接時,另一個socket可以要求進行連接,一旦這兩個socket連接起來,它們就可以進行雙向數據傳輸

50、,雙方都可以進行發送 或接收操作。TCP在網絡通信上有極強的生命力,例如遠程連接(Telnet)和文件傳輸(FTP)都需要不定長度的數據被可靠地傳輸。但是可靠的傳輸是要付出代價的,對數據內容正確性的檢驗必然占用計算機的處理時間和網絡的帶寬,因此TCP傳輸的效率不如UDP高。UDP是User Datagram Protocol的簡稱,是一種無連接的協議,每個數據報都是一個獨立的信息,包括完整的源地址或目的地址,它在網絡上以任何可能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內容的正確性都是不能被保證的。UDP操作簡單,而且僅需要較少的監護,因此通常用于局域網高可靠性的分散系統中cl

51、ient/server應用程序。例如視頻會議系統,并不要求音頻視頻數據絕對的正確,只要保證連貫性就可以了,這種情況下顯然使用UDP會更合理一些。 Socket概念網絡上的兩個程序通過一個雙向的通訊連接實現數據的交換,這個雙向鏈路的一端稱為一個Socket。Socket通常用來實現客戶方和服務方的連接。Socket是TCP/IP協議的一個十分流行的編程界面,一個Socket由一個IP地址和一個端口號唯一確定。但是,Socket所支持的協議種類也不光TCP/IP一種,因此兩者之間是沒有必然聯系的。在Java環境下,Socket編程主要是指基于TCP/IP協議的網絡編程。 Socket通訊的過程Se

52、rver端Listen(監聽)某個端口是否有連接請求,Client端向Server 端發出Connect(連接)請求,Server端向Client端發回Accept(接受)消息。一個連接就建立起來了。Server端和Client 端都可以通過Send,Write等方法與對方通信。對于一個功能齊全的Socket,都要包含以下基本結構,其工作過程包含以下四個基本的步驟:(1) 創建Socket;(2) 打開連接到Socket的輸入/出流;(3) 按照一定的協議對Socket進行讀/寫操作;(4) 關閉Socket.創建Socketjava在包中提供了兩個類Socket和ServerSocket,分

53、別用來表示雙向連接的客戶端和服務端。這是兩個封裝得非常好的類,使用很方便。其構造方法如下:Socket(InetAddress address, int port);Socket(InetAddress address, int port, boolean stream);Socket(String host, int prot);Socket(String host, int prot, boolean stream);Socket(SocketImpl impl)Socket(String host, int port, InetAddress localAddr, int localPo

54、rt)Socket(InetAddress address, int port, InetAddress localAddr, int localPort)ServerSocket(int port);ServerSocket(int port, int backlog);ServerSocket(int port, int backlog, InetAddress bindAddr)其中address、host和port分別是雙向連接中另一方的IP地址、主機名和端 口號,stream指明socket是流socket還是數據報socket,localPort表示本地主機的端口號,localAd

55、dr和 bindAddr是本地機器的地址(ServerSocket的主機地址),impl是socket的父類,既可以用來創建serverSocket又可 以用來創建Socket。count則表示服務端所能支持的最大連接數。例如Socket client = new Socket(127.0.01., 80);注意,在選擇端口時,必須小心。每一個端口提供一種特定的服務,只有給出正確的端口,才 能獲得相應的服務。01023的端口號為系統所保留,例如http服務的端口號為80,telnet服務的端口號為21,ftp服務的端口號為23, 所以我們在選擇端口號時,最好選擇一個大于1023的數以防止發生沖

56、突。在創建socket時如果發生錯誤,將產生IOException,在程序中必須對之作出處理。所以在創建Socket或ServerSocket是必須捕獲或拋出例外。 圖 客戶端服務器之間的通信流程2.6 Vector 類 在JAVA中的詳細說明Java.util.Vector提供了向量(Vector)類以實現類似動態數組的功能。在Java中是沒有指針概念的,但如果能正確靈活地使用指針又確實可以大大提高程序的質量,比如在C、C+中所謂“動態數組”一般都由指針來實現。為了彌補這點缺陷,Java提供了豐富的類庫來方便編程者使用,Vector類便是其中之一。事實上,靈活使用數組也可完成向量類的功能,但

57、向量類中提供的大量方法大大方便了用戶的使用。 相對于ArrayList來說,Vector線程是安全的,也就是說是同步的創建了一個向量類的對象后,可以往其中隨意地插入不同的類的對象,既不需顧及類型也不需預先選定向量的容量,并可方便地進行查找。對于預先不知或不愿預先定義數組大小,并需頻繁進行查找、插入和刪除工作的情況,可以考慮使用向量類。向量類提供了三種構造方法: public vector() public vector(int initialcapacity,int capacityIncrement) public vector(int initialcapacity) 使用第一種方法,系統

58、會自動對向量對象進行管理。若使用后兩種方法,則系統將根據參數initialcapacity設定向量對象的容量(即向量對象可存儲數據的大小),當真正存放的數據個數超過容量時,系統會擴充向量對象的存儲容量。參數capacityIncrement給定了每次擴充的擴充值。當capacityIncrement為0時,則每次擴充一倍。利用這個功能可以優化存儲。在Vector類中提供了各種方法方便用戶使用: 插入功能 (1)public final synchronized void addElement(Object obj) 將obj插入向量的尾部。obj可以是任何類的對象。對同一個向量對象,可在其中插

59、入不同類的對象。但插入的應是對象而不是數值,所以插入數值時要注意將數值轉換成相應的對象。 例 要插入一個整數1時,不要直接調用v1.addElement(1),正確的方法為: Vector v1=new Vector(); Integer integer1=new Integer(1); v1.addElement(integer1); (2)public final synchronized void setElementAt(object obj,int index) 將index處的對象設成obj,原來的對象將被覆蓋。 (3)public final synchronized void

60、insertElementAt(Object obj,int index) 在index指定的位置插入obj,原來對象以及此后的對象依次往后順延。 刪除功能public final synchronized void removeElement(Object obj)從向量中刪除obj。若有多個存在,則從向量頭開始試,刪除找到的第一個與obj相同的向量成員。public final synchronized void removeAllElement() 刪除向量中所有的對象。public final synchronized void removeElementlAt(int index)

溫馨提示

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

評論

0/150

提交評論