java项目开发总结

2024-09-03

java项目开发总结(精选13篇)

1.java项目开发总结 篇一

经过两个星期的java项目实习,对java对象无论是各个知识点还是思想都有显著的提高。

在做《贷款信息查询服务器系统》的这两个时间中,张成峰老师给了我们很大的帮助,自身感觉进步很大。

在之前学的不太好不明白的地方,现在也有了比较清楚的认识,很感谢张成峰老师又一次帮助我们重新过了一遍java面向对象。

在这短短两个周的项目中,每天的代码量都不是之前想的那么多,但是每天都过得很充实,扩展了许多之前不知道的知识,班上的学习气氛也是空前的凝聚,虽说代码量不多,但却几乎包含了所有java面向对象的重要知识点。

本次项目可以分为:(1)表现层(2)业务层(3)持久层(4)控制器。

充分运用了封装,继承,多态,J2SE,套接字,I/O,集合,日期日历,多线程,反射,JDBC,JDOM,工厂模式....等。

扩张了许多项目中用到的知识点:单例模式、工厂模式、回调机制、数据库连接池等等。

张老师给我们的讲解中,每每都是以思想为中心,不要求我们把代码记的好熟,只要求我们能够理解思想,正因如此,许多之前堵塞的问题在项目中都有了头绪,更好的在项目中体现出来。

其次也认识到了写注释是个很重要的事情,说实话,我们之前写的代码在许多程序员中都是垃圾代码,其实说的也对,确实是垃圾,但是我们不会灰心丧气,毕竟我们现在才刚刚开始,有哪一个程序员刚开始不写些垃圾代码呢,只有这样我们才能逐步养成好的编程习惯,规范是人人必须要遵循的。

不以规矩不成方圆,如果每个人都以自己的方式来做程序,一个人有一种程序代码,一万个人就有一万种代码,那就没有一个统一的标准。

所以我们必须养成好的编码规范。

不只是为了我们自己好看,也为了给阅读我们代码的人方便。

我们尤其应该在变量名的命名上下大工夫,不能图一时的方便,必须符合“见其名知其意。

”一定要为我们的代码加上相应的注释。

通过此次项目,虽说还是成功做出来了,但也的确发现了自身许多不足的地方。

因此大家更应该及时总结,找到自己的不足之处,从今天开始改变自我,努力做到最好,在以后的学习和工作中做得更好。

2.java项目开发总结 篇二

出于安全性和便利性等方面的原因,局域网程序要访问Internet,通常不能或者不方便直接连接Internet,而要先连接局域网中的某台代理服务器,将请求发给代理服务器,代理服务器收到局域网的请求后,会试图连接Internet上的相应的IP地址和端口,并将客户端请求数据发送到Internet上;如果Internet上有返回的数据,代理服务器再将数据返回给发出请求的局域网客户端。通过代理服务器转发客户端数据的功能,实现了局域网用户访问Internet的需求。

一般Internet上常见的代理服务器是HTTP代理、Sock4代理、Sock5代理3种。大部分客户端程序都支持上述三种代理。HTTP代理一般用于浏览网页,同时也有可能用于其他操作。Sock4和Sock5代理统称为Socks代理,通常用于各种使用TCP/IP协议的程序。其中Sock4代理只支持TCP数据传送,Sock5代理支持TCP和UDP数据传送,同时还支持多种客户验证功能。不管哪种代理,都要通过一系列协商会话,确定局域网和因特网上的IP地址(域名)和端口号,并建立相应的套接字,以后的读写操作就和一般的套接字操作相一致。

1 常见代理

1.1 HTTP代理

使用HTTP代理,局域网要访问Internet时,会和代理服务器的服务端口建立TCP连接,然后发出诸如GET、POST、CONNECT等请求命令,该命令中包含因特网上的IP地址(域名),有时还有端口号,如不特别指定端口号,则默认端口号为80。代理服务器从请求命令中取出要连接的IP地址和端口号,建立一个TCP套接字连接,把客户端的请求转发到Internet上,如从该套接字中读到Internet返回数据,代理服务器会通过客户端套接字把数据返回给客户端,以便客户端程序进行处理。

GET命令用于从Internet上获取某个资源。

POST命令用于向Internet提交客户数据。

CONNECT命令用于与Internet上的某IP地址和端口号建立TCP连接。

HTTP代理工作模式如下:

(1)客户端连接HTTP代理服务器服务端口。

(2)客户端发送HTTP命令请求,其中包括域名 (IP地址) 、端口号等信息。

(3)代理服务器根据客户端发来的命令,从中解析出要连接的IP地址(域名)、端口号,并建立因特网TCP套接字。

(4) 循环读出局域网套接字中数据, 写入因特网套接字中。

(5) 循环读因特网套接字中数据, 写入局域网套接字中。

1.2 Sock4代理

Sock4代理工作模式如下:

(1)客户端连接Sock4代理服务器的服务端口。

(2)客户端发送命令41+目的端口号(2字节的16进制表示)+目的IP地址或域名(如字节4、5、6均为0,而字节7不为0,字节8为0,则表示其后是一个域名;否则其后4个字节是16进制表示的IP地址)。

(3)代理服务器根据取出的IP地址(域名)、端口号建立因特网TCP套接字。

(4)代理服务器向客户端返回应答0 0x5a+因特网套接字绑定的IP地址(只取前2字节)+因特网套接字绑定的端口号(2字节的16进制表示)。

(5) 循环读客户端套接字, 读出数据写入因特网套接字。

(6) 循环读因特网套接字, 读出数据写入客户端套接字。

1.3 Sock5代理

Sock5代理工作模式如下:

(1)客户端连接Sock5代理服务器服务端口。

(2) 客户端发送命令510, 表示要进行SOCK5代理。

(3) 代理服务器返回应答50, 表示可以进行代理。

(4)客户端发送命令5101+目的地址(4字节的16进制表示)+目的端口(2字节16进制表示)。

(5)代理服务器根据取出的IP地址、端口号建立因特网套接字。

(6)代理服务器向客户端返回应答5001+因特网套接字绑定的IP地址(4字节的16进制表示)+因特网套接字绑定的端口号(2字节的16进制表示)。

(7)循环读客户端套接字,读出数据写入因特网套接字。

(8)循环读因特网套接字,读出数据写入客户端套接字。

2 程序解析

主程序类proxy的main函数中有如下代码段,用于建立HTTP代理和Socks代理服务套接字:

httpdaemon和socksdaemon两个类用于处理HTTP代理和SOCKS代理客户端连接请求, httpdaemon类实现代码如下:

sockdaemon代码类似于httpdaemon,实现代码如下:

HTTPServerThread类用于HTTP代理中读客户端请求,并发送给因特网,实现代码如下:

HTTPServerThread1类用于HTTP代理中读因特网返回数据,并发送给客户端,实现代码如下:

SockSServerThread类用于Socks代理中读客户端请求,并发送给因特网,实现代码如下:

SocksServerThread1类用于Socks代理中读因特网返回数据, 并发送给客户端, 实现代码如下:

3 结语

充分地利用Java语言稳定性高、可移值性强、开发简单的特点,开发成功了代理服务器程序。程序经过了测试,可以在实际环境中进行使用,满足局域网通过代理服务器访问Internet的需求。本程序暂不支持Sock5中UDP数据代理和客户验证功能,只要客户端支持HTTP、Sock4、Sock5代理中的一种,都可使用本程序代理Internet操作。

参考文献

[1]朱福喜, 尹为民, 余振坤.Java语言与面向对象程序设计.武汉大学出版社, 2002.

[2]RFC2616.Hypertext Transfer Protocol--HTTP/1.1.Network Working Group.1999.

3.浅谈Java桌面应用程序开发 篇三

【摘 要】Java对于服务器,个人电脑和移动设备来说是一项伟大的技术。由于需要java的跨平台的特性,因此java在服务器和移动设备方面的应用是非常成功的。Java开发的桌面程序既有友好易用的图形用户界面,也能够实现相应的功能。【关键词】桌面开发

AWT

Swing SWT Java与桌面端现在流行的桌面平台要数Windows、Mac和 Linux。但它们不是十全十美的,Windows主宰着桌面操作系统的市场,其上有巨大的应用和开发群体,但它昂贵且有许多安全漏洞。Linux有着稳固的基础,它是开源的软件,比Windows更可靠。Mac非常容易操作且不是黑客的目标,但与Windows和Linux比起来,Mac的硬件和软件可选的余地非常的有限。Windows、Linux和Mac 在桌面的流行创造了多样性,这种多样性正是Java需要的,这就使得Java在桌面有举足轻重的地位。跨平台的支持Java 运行于所有相关的操作系统,包括Windows、Mac和Linux。也就是说把现有的应用从一个操作系统移植到另一个操作系统而不用做太多的改动,所以Java是首选的桌面开发平台。或许用微软的可视化工具很容易构建.NET应用,但是这将使软件被绑定在了Windows平台上。也许有人想用Linux 代替Windows 从而避免由微软操作系统的漏洞带来的问题,但是用户不能容忍的问题之一是当从Windows移植到Linux时所带来的巨大的费用。如果应用程序用Java构建,就没有了这些问题,Java的图形用户界面看上去会跟使用的操作系统一样,而并不需要做什么改动。丰富的特征最初,Java只有非常有限的一些特征去构建图形用户界面,思想就是用与平台无关的Java应用程序接口打包不同的操作系统的本地图形用户界面,称之为抽象的窗口工具。它仅有普通的部件如文件域、文本区、选择框、单选按钮、列表框和按钮被AWT支持,图形和图像的特性支持非常有限,也就是说,只能够构建简单的applet程序。认识到需要更高级的图形用户界面组件和图形能力,Sun公司开发了Swing,Java 2D,Java 3D,图像的输入/输出,Java高级图像(JAI)和很多其它的组件。这些中的一些窗体组件现在已经是Java 2标准版(J2SE)里的一部分。例如Swing、Java 2D、图像的输入/输出都是Java的核心API,它们随着Java开发工具包(JDK)和Java运行环境一起被提供给用户。Java图形界面工具Java有三个主要的图形界面工具:AWT,Swing和SWT。Swing 是构建java图形界面标准的API(应用程序接口),一些AWT类由Swing继承而来。SWT是一个非常有前途的新的窗体工具,由IBM资助。但是事实上,这三者相互补充,它们满足不同的需求。AWT抽象窗口工具包(Abstract Windowing Toolkit)(AWT)是Java的平台独立的窗口系统,图形和用户界面器件工具包。AWT是Java基础类(JFC)的一部分,为Java程序提供图形用户界面(GUI)的标准API。AWT提供了JavaApplet和Java Application中可用的用户图形界面GUI中的基本组件(components)。由于Java是一种独立于平台的程序设计语言,但GUI却往往是依赖于特定平台的,Java采用了相应的技术使得AWT能提供给应用程序独立于机器平台的接口,这保证了同一程序的GUI在不同机器上运行具有类似的外观(不一定完全一致)。SwingSwing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。工具包中所有的包都是以swing作为名称。SWTSWT是IBM为它的Eclipse集成开发环境而开发的图形用户界面工具。SWT可以在Eclipse环境外使用,而且提供对操作系统本地图形用户界面的直接访问。因此,基于SWT的Java应用程序拥有本地的图形用户界面并且可以和本地别的应用程序和部件集成在一起。SWT社区现在正在设计浏览器API,这些API可以产生基于IE或者Mozilla的HTML窗口。SWT现在可以在AIX,HPUX,Linux,QNX,Solaris,和Windows下面运行。误解与Bug对于java/Swing一直有着误解,诸如:Java/Swing太慢了,或者是Java/Swing需要更多的内存。也许老式的奔腾运行JDK1。2确实很慢,但是PIII级别的CPU运行JDK1。4环境是足够快的。一个应用程序中鼠标在1毫秒和在10毫秒的反映的差异,从使用者方面来说是没什么区别的。Java不但在企业级的上千人同时在线的服务器中表现良好,而且在仅有有限资源的移动设备上的表现也是很出色的。总结Java作为一种网络技术,是为了在浏览器中能够运行小应用程序而发布,但是它从开始就有运行独立的桌面应用程序的能力。不幸的是,AWT没有提供足够的桌面端的程序所需的特性。Swing着手于解决这些问题,但是它有不少的bug。今天,Java有构建大型桌面端应用程序的能力并修复了bug。Java独有的优点是“只写一次,到处运行”——在Windows,Linux,Mac和其它操作系统上运行Java代码的能力。【参考文献】[1]Eric,Java编程思想[M],第4版,机械工业出版社,2007年4月[2]Metsker S J,Java设计模式[M],第2版,电子工业出版社,2012年09 月[3]毕建信,基于MVC设计模式的Web应用研究与实现[D],武汉理工大学出版社,2006年5月

4.java项目实训总结 篇四

通过此次短暂的作业设计,我深有感触。从一开始的构思再到今天写下这份总结。期间时间虽短但是也学到了不少的知识。在刚开始构想只有大体的思路,忽略了一些细节,因此在我真正做设计方案时发现有很多错误,有的时候要解决一个错误反反复复会花上很多时间。在做的过程中,也会有很多意想不到的错误,其中有的错误到最后解决的时候却是发现犯得很幼稚,不过这样的错误多了,在不知不觉中对一些命令知识分外的熟悉了起来,并且自身的排错能力也得到很大的提高。

此次的方案设计,让我第一次摸索java的需求去构建框架,在设计过程中总是会遇到一些很小的问题,虽然不明显,却可以影响到整个软件的运作。

在这次实习过程中,我发现平时学习的知识与实践环节所用到的有一定的差距,往往我觉得自己掌握的很好或者自认为熟练的技术却在此次实践环节中往往出问题,书本上的知识只提供方法的借鉴,实践中自己必须摸索出适合具体工作的方法,这一切都离不开钻研精神与勤学好问的精神.在人与人相处过程中我收获更大,首先要谦虚谨慎,不能自以为是,认为自己懂得很多,而仅仅埋头苦干,而不向他人请教,工作不但是实践与应用的过程,同时也是学习的过程,我们必须加强与他人的沟通学习,以便获得与他人的交流。

5.java项目开发总结 篇五

大作业总结报告

(第3组)

小组成员:曾志鑫

3131101242

3131101216

3131101243

曾海达

3131101241

潘宝坤

3131101237

一、小组作业题目

学生信息管理系统

二、功能(业务)描述及设计思想(建议UML图示辅助介绍更好)

本系统是用JAVA编写的,运行环境也是在JAVA下,所用数据库为SQL Server 2008,本系统有教师和学生两个版本,即有学生和教师两种权限。在运行了本系统后,可能通过注销来切换用户。现在登陆的为教师权限的教师版,在有这个权限时,可以添加任意想添加的学生信息。当需要删除某个学生的信息时,也可以做出想应的操作。当要为学生录入成绩时,点击相应的按钮根据界面做出相应的操作就可以完成了,删除某个学生的成绩时,也是一样的。另外还有添加选修课程名的功能,这个功能是为了实现现在学生有选修课的,当有不同的选修课时就可以自己加入即可。当某门选修课不再开时,删除对应的选修课就行了。当鼠标放在每一个按键上,界面右边就会提示并介绍这个按键的功能。

如果现在登陆的为学生权限的学生版,在有这个权限时,可以查看自己"的个人信息和成绩,学生进入的用户名为自己的学号,默认的密码为学号。学生自己可以在登陆了本系统后自行修改自己的密码。切记要修改自己的个人进入密码,并妥善保管好自己的密码。在登陆本系统后,学生就可以选课了,所有可选的课程名都可以选择,但每个人限选一门,当在有选修课后再去选课就会出现相应的提示,如需重选,则点击相应的按钮,就会出现重选界面。但要注意重选选修课是先删除已选的选修课之后再选,所以重选和删除选修课要慎重.查看个人信息,就可以看到自己的信息和成绩。

系统总体结构图如下:

三、运行结果截图

系统登入界面

系统首界面

添加信息界面

添加成功界面

删除信息界面

查询信息界面

修改信息界面

添加选课界面

删除选课界面

四、程序中存在的缺陷及解决思路

1、系统没有设计注册,账号密码是通过管理员分配的。

2、对数据库的操作是对于单表操作的,没有在多表实现同步。表与表之间没有建立起连接。

五、程序调试情况说明

1、开始的时候,数据库连接不上,上网搜索找资料后才知道是数据库在安装的时候是默认使用windows方式验证的,需要设置为window 与sql 的混合方式验证,并且启用sa账户并设置密码与应用程序匹配。

2、在数据库解决时候还是连接不上,在阅读书籍之后忽略了eclipse里需要导入相应的数据库包,比如sql的sqljdbc.jar

3、界面设计时需要根据数据的大小显示出想要的大小,以及位置。开始数据的方式不是那么的好用,上网搜索了一下电脑分辨率的获取,然后利用电脑的分辨率来进行控制。

4、在对数据库进行操作时,一开始没有考虑到数据的同步,所以表与表之间需要建立主键与外键的连接,那样的话设计到视图的操作,感觉时间上没那么多,就没有解决。

六、开发心得

一个好的团队的总体力量超过一个个体力量的总共和。

开发我们提倡团队开发,主要原因有

三、第一,软件开发过程复杂,而团队可以使问题简单许多,遇到问题可以大家一起解决。第二,团队操作可以在很大程度上实现优势的互补。第三,团队合作在很大程度上培养了人与人之间沟通的理解能力。

一直以来期望从事自己喜欢的事业的我,对软件开发有者及大的兴趣,可由说种种原因使我从事工作以来走了好几年弯路,心中的梦想迟迟不能得以实现,可程序员的梦想从来没有从我的心中抹去,但这扇大门好像并没有向我敞开,今天,贵公司给了我敲开这扇大门的机会,让我真实体验了程序员的诞生过程。早就听说,程序员的前几个月是最苦的,可从来没有感受到,海马实习基地让我提前感受到了刚刚进入软件行业的压力和困惑,再也没有在自己家里随便写段小程序后的那种“自豪”感了。要面对每天必须面对的问题,再也不可能以“逃避”而了之了。也让我感觉到做为一个程序员所应该具备的基本素质在这不到一个月的实习过程中也让我深深体会到了作为一个合格的程序员应该具备的基本素质。

团队精神和协作能力是程序员应该具备的基本素质,最近的工作中让我深深休会到了这一点,由于小组成员配合不好,使本来很方便的cvs给自己的工作带来的及大的麻烦,一不小心自己写的的东西就会被小组别的成员在上传文件的时候给覆盖掉,一整天的工作可能就这样被反工,我们小组这次就是因为协作不好,导致各模块之间不法连接,给工作带来了及大的麻烦,消耗了大量的劳动力还没有提高工作效率。这使我深深的体会到:一个成功商业性软件的开发必须有一个有强大凝聚力的团队,个人的力量是有限的,团队精神和良好的协作会使我们做出优秀的软件。

良好的文档是正规研发流程中非常重要的环节,作为代码程序员,30%的工作时间写技术文档是很正常的,缺乏文档,一个软件系统就缺乏生命力,在未来的查错,升级以及模块的复用时就都会遇到极大的麻烦。这次的这个小小的项目,就因为文档上的一点点理解错误让我们花了很大的工夫去改代码,改页面。很庆幸的是,这是一个小项目,要是大项目,这种问题可能就会导致大量的代码修改,可见文档在一个项目中起者巨大的做用。

此外,良好的代码编写习惯,不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。作为一个程序员,对需求的理解能力也是很重要的,只有真正理解了一个模块的作用,才会写出高效率的代码,才能使整个软件项目作出来更加优秀,具备更好的安全性和稳定性,我在写代码的过程中就遇到了需求理解上的问题,使得写出来的代码功能不全,幸好不是给客户发现在,要不,这个软件的商业价值可能就会打折扣了。单元测试对于一个程序员来说是不可不做的一项工作,不做好测试就会给后期的集成工作带来麻烦,往往为了一个小问题会让我们查找好多模块,给后期工作带来很大麻烦。

这一段时间的工作也让我明白了一点:一个优秀的程序员必须不断的学习,随时总结,找到自己的不足,这样逐步提高,才能让自己很快的成长起来。

七、小组成员的工作分配,及完成情况(作为评个人成绩的依据): 曾志鑫:部分代码撰写及文档撰写

洋:主要负责代码的撰写

超:部分代码撰写及部分文档撰写

曾海达:负责代码调试及部分文档撰写 潘宝坤:负责代码调试及部分文档撰写

八、源代码清单(注:只需列出文件名,具体的项目代码和该报告一起打包上传到服务器本课程目录下的“课程大作业”子目录)

1)数据库操作函数

public boolean Method_InsertInto(String query,String number)//添加学生信息到数据库中的方法 public String Method_query(String query,String number)//查询学生信息的数据库

public boolean Method_alter(String query_message,String query_score)//修改学生信息的数据库方法 public String Method_print_all_name()//得到数据库中所有的学生姓名

public int Method_delete(String number,boolean category_delete)//删除学生信息的数据库方法 public void Method_add_curriculum(String query)//将新的选修课名添加到数据库中的方法 public void Method_del_curriculum(String query)//删除数据库中选修课名的数据库方法

public String Method_query_curriculum(String number)//查询数据中学生选修课这项是否有了选修课名 public String Method_teacher_query_all_curriculum()//得到教师所有可删除的选修课程名 public String Method_student_query_all_curriculum()//得到学生所有可以选择的选修课程名 public boolean Method_student_add_curriculum(String curriculum)//将学生的选课加入到数据库中的学生信息中

public boolean Method_student_del_curriculum()//将数据库中学生已选的选修课删除 public boolean Method_change_password(String password)//修改数据库中学生的密码

2)登录及操作函数

public void Method_Login()//用户登陆操作 public void Method_Inquire()//查询的处理

public void Method_Add_Student_Information()//添加学生信息操作

public void Method_Print_All_Name()//将得到的所有学生姓名加入到下拉菜单中 public void Method_Del_Information()//删除学生信息操作 public void Method_Add_Curriculum()//教师添加选修课程名操作 public void Method_Del_Curriculum()//教师删除选修课程名操作

3)学生操作函数

public void Method_Student_Add_Curriculum()//学生选课操作 public void Method_Student_Del_Curriculum()//学生删除选修课操作 public void Method_Change_Password()//学生修改密码操作 public void Method_Explain()//显示系统说明的操作

4)界面显示操作的部分函数

public static Point getMidDimesion(Dimension d)//获得屏幕中间的坐标 public Image getImage(String url)private JFrame getJFrame_addinformation()private JFrame getJFrame_addinformation()5)对学生信息按钮的操作的部分函数

private JButton getJButton_query()private JButton getJButton_delscore()private JButton getJButton_alterscore()private JButton getJButton_addscore()private JButton getJButton_delinformation()private JButton getJButton_addinformation()6)对菜单子项的操作的部分函数

private JMenuItem getJMenuItem_explain()private JMenuItem getJMenuItem_last()private JMenuItem getJMenuItem_query()private JMenuItem getJMenuItem_delscore()private JMenuItem getJMenuItem_alterscore()private JMenuItem getJMenuItem_addscore()private JMenuItem getJMenuItem_delinformation()private JMenuItem getJMenuItem_addinformation()private JMenuItem getJMenuItem_change()7)对菜单主目录操作的部分函数

private JMenu getJMenu_help()private JMenu getJMenu_inquiry()private JMenu getJMenu_result()private JMenu getJMenu_information()private JMenu getJMenu_file()8)对学生信息的操作,如:性别、选修课、成绩等部分函数

private JTextField getJTextField_student_result_sex()private JTextField getJTextField_student_result_curriculum()private JTextField getJTextField_student_result_NativePlace()private JTextField getJTextField_student_result_department()private JTextField getJTextField_student_result_specialty()private JTextField getJTextField_student_result_class()private JTextField getJTextField_student_result_java()private JTextField getJTextField_student_result_english()private JTextField getJTextField_student_result_math()private JTextField getJTextField_student_result_sports()9)对选修课的操作的部分函数

6.java开发实习周记 篇六

实习第四个礼拜,主要熟悉了java的高级应用

线程:进程是运行中的应用程序,是一套顺序执行的指令,每个进程都有自己独立的内存空间。线程是一个并发执行的顺序流,一个进程包括多个顺序执行流程,这些流程称为线程。 jvm 就是一个进程,在jvm 中分出线程,比如main就是主线程。同时开辟并发执行的序列即多线程。调用start()方法,线程启动;run()方法结束,线程就终止。线程是一个操作系统创建并维护的一个资源。对于单cpu 系统来说,某一个时刻只可能由一个线程在运行。一个thread 对象就表示一个线程。进程的数据空间独立;线程的数据空间共享, 能充分使用cpu 的资源。线程间通信更容易。共享数据就要加锁、解锁,会降低效率。

i/o:是在jvm 和外部数据源之间交换数据。按数据传输方向划分:输入流和输出;按数据单位划分:字节流和字符流;过滤流用来封装节点流或者其他过滤流,从而给节点流或其他的过滤流增加功能。

7.使用JDE配置Java开发环境 篇七

使用emacs (本文使用emacs来代表GNU emacs或XEmacs) 来开发程序显然是个很好的选择, 其效率、高度的可配置性和极其强大的功能足以让任何人爱不释手。由于Java的特性一些特性, 使用emacs这样的纯编辑器来进行Java开发也有其不方便之处, 对于较大的项目, 源文件经常分布在繁多的目录中 (/com/foo/bar/…) , 如果使用emacs进行开发, 需要频繁的敲入冗长的目录名, 这是一大不方便之处。其次, 在Java编译和运行调试, 我们需要向编译器, 虚拟机传递一些参数, 当然, 可以使用Makefile来实现, 但这些参数大多并不复杂, 使用make这样功能强大的工具有些破费了。还有, 对于一些经常使用的功能或语句如 (System.out.println, implements) 每次使用都自己敲显然太烦琐。最后, 对于一个OO语言来说, 有一个类浏览器也是很方便的。

现在, 使用jde可以基本克服所有这些缺点, 将IDE的功能和emacs的优点完美地结合起来。jde是一个使用emacs-lisp编写的ide软件包, 主要部分有Paul Kinnucan开发, 在emacs中安装jde后可以基本实现大多数商业IDE系统所提供的功能。由其主要特性有以下几点。

针对Java的语法高亮显示和缩进。

关键字及类方法等的自动补全 (SourceInsight?, 目前还不很成熟) 。

编译错误定位。

框架代码自动产生 (Listener, println等) 。

工程文件 (记录编译运行调试参数) 。

树状类和文件浏览器显示。

集成帮助 (javadoc) 及调试功能 (jdb+gud) 。

除了这些特征外, jde当然具有emacs的一切优秀特征, 如可移植性 (几乎一切OS) , 可配置性。下面将具体介绍jde的安装及使用。

1 安装

由于jde是一个emacs-lisp语言包, 它的安装是非常方便的, 当然, 需要具有emacs配置的基本知识。首先, 需要满足其安装要求, emacs, GNU Emacs或XEmacs 19版以上, 软硬件平台不限。

确认安装了jde需要的一些emacs-lisp包 (package) , 有speedbar (类浏览器) , semantic (语法分析) , eieio (OO lisp) , elib (Emacs lisp Utilities) , 另外, 有些功能需要beanshell, 在XEmacs下运行需要安装FSF-compat包

将jde包解开到某目录, 当然也要修改相应的.emacs配置文件增加一些内容。

如果安装无误的话, 使用emacs打开java文件时将自动进入jde-mode, 过程可能需要几秒钟, 因为jde将调用semantic对整个文件进行语法分析。

2 使用Jde

进入jde-mode后, 我们自然可以发现与普通Java-Mode有一些不同, 首先是语法的高亮显示更加“Java”化, 一目了然。xemacs顶部的菜单也有了一些变化多了三个菜单项, “JDE”, “Classes”, “Senator”, JDE菜单里包括了JDE提供的所有功能, 下面将详细介绍, “Classes”是JDE对Java文件进行语法分析后生成的, 包括了当前文件中的所有类, 变量, 方法, 可以通过选择菜单的方式访问相应的代码。而Senator菜单是由semantic包生成的, 可以通过token的方式对源文件进行搜索定位。下面我们来看看emacslisp为我们提供了什么样的功能:

JavaDoc支持:JavaDoc是JDK提供的文档生成工具, 通过遵循一定的规范对源代码进行注释, JavaDoc可以生成整个程序的Java风格文档。在jde中, 我们只需要将光标定位在某method的开始, 按C-c C-v j, jde将自动生成Javadoc框架注释, 在相应的部分写好说明后, 可以使用javadoc工具生成Java风格的文档。

自动补全:将变量jde-enable-abbrevmode变量设置为t, jde可以实现自动补全的功能, 避免我们手工输入的烦琐和易错, 补全主要有三种类型, 首先关键字补全, 即可以自动补全Java语言的关键字, 如我们敲入“impl”, jde就会自动补全成为implements.其他的如abstract可以用“ab”来补全, 当然, 这只是emacs-lisp雕虫小技罢了, 但重要的是你可以通过对变量jde-mode-abbrevations变量的修改来自己定义那些关键字应补全应怎样补全。

下面介绍对控制流结构的补全, 即ifelse等结构的补全, 可以避免控制结构写大了以后结构发生错误, 不过本人体会只要你有良好的编程习惯, 这个东西用处不是太大。比较有用的还有变量名的补全, 如我们在某Java文件中定义了名字较长的变量名为“variablenametoolong”, 在后面需要引用时, 我们不必记住变量的名字, 在输入头几个字母后, 按M-/键, jde将自动补全为相应的变量名, 如果有多个选择, 多次按M-可以找到你需要的。SourceInsight式的全局method补全功能目前jde通过beanshell实现还不够成熟。

代码框架:jde可以自动生成特定类和代码段的框架代码, 不需要用户多次重复输入, 目前支持的有。

import自动生成, 即不需要知道某class到底是在什么package里, 敲入其名字后按C-c C-v C-z, jde会自动调用beanshell找到相应的package并自动加入impor t;method重载自动生成, 即可以根据当前继承的类来自动生成重载函数的框架。

interface自动生成, 根据所implements的interface, 自动生成所需要的重载的函数根据模版生成某特定类型类的框架, 目前有WindowListener, ActionListener, Get/Se等等。以上这些模版都可以根据需要自己来修改。

项目文件:将所有编译, 运行参数一次存储起来, 设置好classpath, sourcepath mainclass...之后我们可以在任一文件的Buffer中按C-c C-v C-c对当前文件进行编译, 按C-c C-v C-r可以自动运行项目或按C-c C-v C-d进行调试。

集成帮助:设置好帮助文件的URL后可以使用C-c C-v C-n自动运行启动B r o w s er来查看帮助, 最好安装e m a c sw3m, 这样看帮助非常方便, 更方便的是设置好Class的帮助文件后可以实现上下文敏感的帮助。在某符号上调用jde-helpsymbol, 可以自动显示该符号的帮助。

类和文件的浏览:jde提供了三种方法第一种即我们已提过的Class菜单, 第二种是使用etags, 第三种最强大的是使用speedbar实现的树状浏览器。几乎和商业IDE使用的没有任何区别, 可以用图形方式快速地访问文件, 类的方法及变量及其所依赖的包等等。

3 结语

jde拥有几乎无限的可配置性, 最基础可以修改与jde相关的变量和key-binding等, 深入一些的可以修改模版等, 当然最深入的就是直接Hack其源码了。

参考文献

[1]Debra Cameron, Bill Rosenblatt, HricRaymond.学习GNU Emacs[M].北京:机械工业出版社, 2003, 5.

[2] (美) Robert J.Chassell.GNU Emacs Lisp编程入门[M].北京:机械工业出版社, 2 00 1, 5.

8.java项目开发总结 篇八

关键词:Java;James Gosling;面向对象;Oak

说到Java开发,就不得不谈一谈Java语言的特点,与其他语言相比,Java的可移植性、安全性较好,并提供了并发机制,具有很高的性能。其次,Java语言也最大限度地利用了网络,App在互联网上传输可以不受CPU和环境的限制。其次,他还提供了丰富的内库供使用者选择,当然,这些库的底层都是由C和C++编写的。

下面,笔者就基于网络版的JQ开发来粗浅地谈谈我眼中的Java开发。娱乐聊天作为一个人们津津乐道的话题,早已深入人心,为了满足笔者的“一己私欲”,特此开发出了类似QQ的一款聊天工具——JQ 1.0。在聊天界面中,一般由客户端和服务器端两个部分组成,服务器端主要是负责客户端的连接、信息的传递,将客户端A的消息传递给客户端B,说起来你们可能不信,QQ的开发也是基于这个原理。也就是說,只要你是通过这个服务器发送的消息,就没有他查不到的,只要你通过这个平台,就没有任何隐私可言。在客户端与服务器端的数据传输中,我们需要使用到TCP和UDP协议。粗略地说一下这两个协议,双方都是一种网络传输协议,TCP需要建立连接,而UDP不需要建立连接(无连接传输)。

TCP属于可靠的传输协议:因为传输前双方建立了连接,相当于买卖双方建立好了交易合同,传输中一般不会出现意外,直到连接终止;UDP属于不可靠的传输协议:UDP的所谓连接相当于一种映射,UDP单方面的认为目标地址(端口)是可用的,从而进行收发数据,而实际上目标地址(端口)未必可用,所以传输数据不可靠。由于TCP需要建立真实的连接,所以消耗服务器的负载要大于UDP,通过分析这些特点,信息传输一般会使用UDP协议。

在进行编写程序的初期,我们需要明白,既然是聊天室就要有多个客户端连接一个服务器端来达到大家在同一个聊天室中聊天的目的,因此,我们用到了线程,一个进程都有独立的代码和数据空间,进程间的切换会有较大的开销,一个进程包含1--n个线程。同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小,多进程是指操作系统能同时运行多个任务(程序)。多线程是指在同一程序中有多个顺序流在执行。其中,创建线程有两个方法,一个是继承Thread类,并重写其中的run( )方法,一个是实现Runnable接口,定义其中的run( )方法。

class A extends Thread{ }//创建一个A类,

/*部分代码略*/

//启动线程并重写其中的run( )方法

Thread a=new Thread(new A(){

public void run(){ }

}).start();

服务器端通过系统调用创建一个ServerSocket的类指定的本地端口绑定,就可以在端口进行侦听。首先,服务器端需要先定义一个没有被占用的端口,并设置本机在局域网中IP地址,客户端指定服务器的主机地址和端口号向服务器发送连接请求,如果有客户端连接请求,将请求发送服务器端,经服务器端同意后方可连接成功。这就是利用UDP协议来进行局域网之间的通信连接,一方决定结束通信,向对方发送结束信息,另一方收到结束信息后,双方分别关闭各自的连接。对象停止等候客户端连接请求反之,在客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过多线程来加载不同的用户,过IO流来进行数据的写入和数据的读取。准确地说,是通过流中的高级流序列化流和反序列化流来进行数据的交互。

以服务器所在的主机的IP为“111.111.111.111”所侦听的端口号为“8088”。分别先后启动服务器和客户端应用程序,客户端用户填入登录信息,当服务器收到客户端的登录请求后,若验证登录信息正确,则向客户端发送一个反馈一个登录成功的消息,客户端和服务器通过套接字建立了联系。建立连接后双方就可以相互通信:客户端在自己的文本框输入要发送的信息,点击发送后,发送的信息就会显示在服务器和目的客户端的文本域中,同样,服务器也可以在自己的文本框输入系统信息,点击发送信息按钮后,发送的信息就会显示在服务器和客户端的文本域中。如若要发送文本文件,在客户端界面点击“浏览”,显示一个打开对话框,在上面选择你要发送的文本(*.txt)点击发送,服务器再将文档发给目的用户,将在目的用户的聊天记录文本框中显示整个文档的内容。以上就是笔者做JQ开发的一点心得,望读者批评指正。

参考文献:

[1]David Flanagan . JAVA技术手册(第4版)[M].清华大学出版社,2011.

[2]Stephanie Bodoff . he J2EE Tutorial(中文)[M].颜承,等,译.中国铁道出版社,2012.

9.Java开发环境实验报告 篇九

课程名称

面向对象程序设计

实验项目名称

Java开发环境实验

学生姓名

专业班级

学号

一.实验目的和要求

1. 建立并熟悉Java开发环境,熟悉Eclipse集成开发环境 2. 能够编写简单的Java应用程序

二.实验内容

1.安装和配置Java SDK

2.安装和配置Eclipse集成开发环境

3.编写在屏幕上输出信息的Java应用程序

三.实验结果与分析(可将程序运行结果截屏,也可简单分析运行结果)

1.用Java SDK开发屏幕输出“Hello World”的程序。程序运行结果如下:

2.用Eclipse开发屏幕输出“Hello World”的程序。程序运行结果如下:

3.用Java SDK开发屏幕输出“你好,我开始学OOP了”的程序。程序运行结果如下:

4.用Eclipse开发屏幕输出“你好,我开始学OOP了”的程序。程序运行结果如下:

四.讨论、心得(可写遇到的问题及解决方法,或者对技术的理解等)

1.public类有何特点?

有public的类可以在包外使用,否则不可以,与此同时,源文件名必须和类名相同。

2.Java语言是否区分大小写?

JAVA语言本身是区分大小写的,但是在用文件路径、文件名对文件进行操作时,这里的文件名和路径是不区分大小写的,这是因为文件系统不区分大小写。

3.JVM和JRE都是什么?

JVM是Java Virtual Machine(Java 虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

Java运行环境(Java Runtime Environment,简称JRE)是一个软件,由太阳微系统所研发,JRE可以让电脑系统运行Java应用程序(Java Application)。

JRE的内部有一个Java虚拟机(Java Virtual Machine,JVM)以及一些标准的类函数库(Class Library)。

4.Java如何做到平台无关的?

10.百度java开发面试题 篇十

简评

百度的主要业务是搜索,搜索的基本原理如下

1.编写爬虫程序到互联网上抓取网页海量的网页。

2.将抓取来的网页通过抽取,以一定的格式保存在能快速检索的文件系统中。

3.把用户输入的字符串进行拆分成关键字去文件系统中查询并返回结果。

由以上3点可见,字符串的分析,抽取在搜索引擎中的地位是何等重要。

因此,百度的笔试面试题中,出现这样的题就变得理所当然了。

以下是该题的java实现,代码如下:

程序代码 程序代码

import java.net.*;

import java.io.*;

import java.util.*;

/** * @author tzy * 在j2sdk1.4.2下测试通过 */

public class FileNameStat{

private String srcPath;//要统计的文件路径

private Map statMap;//用于统计的map

public FileNameStat(String srcPath)

{

this.srcPath=srcPath; 软件开发网 www.mscto.com

statMap=new TreeMap;

}

/*获得要统计的URL的文件名*/

public String getFileName(String urlString)

{

URL url=null;

String filePath=null;

String fileName=null;

try

{

url=new URL(urlString);

filePath=url.getPath();

int index=0;

if ((index=filePath.lastIndexOf(“/”))!=-1)

{

fileName=filePath.substring(index+1);

}

else

{

fileName=”“;

}

}

catch(MalformedURLException e)

{

}

return fileName;

}

/*统计指定文件名的个数*/

public void stat(String filename)

{

Integer count=null;

if(statMap.get(filename)!=null)

{

count=(Integer)statMap.get(filename);

count=new Integer(count.intValue()+1);

}

else

{

count=new Integer(1);

}

statMap.put(filename,count);

}

/*统计的主方法*/

public void start() throws FileNotFoundException,IOException

{

BufferedReader bfin=new BufferedReader(new FileReader(this.srcPath));

String temp=null;

while((temp=bfin.readLine())!=null)

{

stat(getFileName(temp));

}

}

/*输出统计结果*/

public void result()

{

Iterator it=statMap.entrySet().iterator();

while(it.hasNext())

{

Map.Entry entry=(Map.Entry)(it.next());

System.out.println((entry.getKey().equals(“”)?”空文件名”:entry.getKey()) + “的个数是” + entry.getValue());

}

}

public static void main(String[] args) throws Exception

{

FileNameStat fns=new FileNameStat(“src.txt”);//指定成待统计文件

fns.start();

fns.result();

}

}

第二题

简评:

这道题也与百度的业务有关,百度现在除了搜索外,还有贴吧,知道,博客等重要产品。 同时也在积极的探索社区化,包括前不久宣布进军电子商务领域,搜索之外的这些产品,其主要功能的实现主要是对数据库的操作。 因此,想进入百度,也需要对数据库有一定的认识。 实现思路及数据库设计: 1,该论坛主要有两个实体对象,用户和帖子;对于帖子对象,有一个问题:回复的帖子是否应该跟主题帖子存放在同一个表里?

考虑到每天更新10万帖子,说明帖子数比较多,为了方便主题的呈现,我一般都把主题贴和回帖分别放在不同的表中,把主题贴和回帖分开可以提高查询效率(300万的访问量每天)。

2,按照1中的思路,该论坛由两个对象(用户和帖子)变成三个实体对象,分别是用户,主题帖子,回复帖子;

3,上述三个对象存在三个关系,分别是:

用户C主题帖,一个用户可以发0个或多个帖子,一个帖子对应一个用户(一对多关系),

主题帖C回复帖:一个主题有0个或多个回复帖子,一个回复帖子对应一个主题(一对多关系);

用户C回复贴:一个用户可以回0个或多个帖,一个帖子对应一个用户(一对多关系)。

还存在对回复贴的回复,这个考虑用fatherId来表示。

4,由于三个关系 “用户C主题帖,主题帖C回复帖,用户C回复贴” 都是一对多关系,根据表设计一般原则,可以将这两个关系独立建立表,也可以不另外建表而将一对多的关系体现在实体表中;然而,表间的连接查询是非常耗资源的,所以应尽量减少表间连接,那么对三个关系不应该分别建表,而是把用户的id作为主题表和回帖表的外键,把主题贴id作为回帖表的外键。

5,鉴于以上考虑,该论坛的三个表如下所示

表名:t_user_info (用户信息表)

字段名 类型 缺省值 中文含义 约束 备注

id Int 用户编号 PRI Auto_increment

Name Varchar(30) 用户名

Email Varchar(50)

Phone Varchar(30)

Addr Varchar(200)

其他字段略,根据需要添加 表名:main_content_info (主题帖信息表)

字段名 类型 缺省值 中文含义 约束 备注

id Int 贴编号 PRI Auto_increment

Title Varchar(200) 发帖标题

Content Text 发帖内容

UserID Int 用户编号 外键

其他字段略,根据需要添加

表名:sub_content_info (回复贴信息表)

字段名 类型 缺省值 中文含义 约束 备注

id Int 贴编号 PRI Auto_increment

Title Varchar(200) 发帖标题

Content Text 发帖内容

UserID Int 用户编号 外键

FatherID Int 父编号

MainID Int 主题帖编号 外键

其他字段略,根据需要添加

6,符合范式分析:

上述表中每个字段不可再分,首先满足1NF;

然后数据库表中的每个实例或行都是可以被惟一地区分(id),不存在部分依赖,因此满足2NF;

t_user_info (用户信息表)和main_content_info (主题帖信息表)不存在任何传递依赖,至少属于BCNF;

但是sub_content_info (回复贴信息表)不满足3NF,因为存在如下传递依赖:idC>FatherID,FatherIDC>MainID。

范式并不是越高越好,sub_content_info表只满足2NF却更有效率,也是当今论坛较主流的设计。

第三题

简评:

如何对海量数据进行快速检索,这是搜索引擎的必需考虑的问题。这又涉及到数据结构和算法。 因此,要想进入百度,就必须熟悉一些基本的算法和数据结构。 思路及解决方案如下:

1: 设计用TRIE树实现关键词到其对应id的快速词典查找

TRIE树的每一个节点为一个包含256个元素的数组,同时指针指向其下一级节点

节点定义如下:

struct trienode

{

int id;

struct trienode *child[256];

}TRIENODE;

如果TRIE树的某个节点的指针为NULL,说明从跟节点到当前节点的路径构成文件B中的一个关键词,

在其节点的id保存该关键词的id;如果指针不为NULL,则id对应为0或者一个无穷大的整数,标志从根节点

到当前节点的路径不是一个完整的关键词。

将关键词转化为二进制无符号char型数组,即对于汉字等双字节字符视为两个无符号char型整数,

每个元素的取值范围在0到255之间。

2:生成文件b的TRIE树

步骤1:依次读取文件b的每一行,对每一行执行步骤2到步骤5

步骤2:读取关键词id和关键词,令为key

步骤3:依次读取key的每一个字符,对每一个字符,执行步骤4;

步骤4:如果该字符对应的指针为NULL,则创建其儿子节点;

步骤5:为当前节点的对应字符id置为关键词id

3:根据A文件生成C文件

步骤1:依次读取文件A的每一行,对每一行执行步骤2到步骤5

步骤2:分别获取当前行关键词、ip地址和时间

步骤3:令关键词key=c1c2…cm,对c1到cm每个字符,执行步骤4

步骤4:获取根节点的第c1个元素指针,转移到节点node1,

根据node1的第c2个元素指针,转移到node2…

根据nodem的第cm个元素,获取关键词的id

步骤5:往文件c中写入一行数据,格式为关键词的id、ip地址和时间

4:复杂度分析

生成文件B的TRIE树过程时间复杂度为O(n*m),其中n为文件b行数,m为文件b关键词的最大长度。TRIE的空间复杂度为O(n*m),n和m含义同上,但由于实际应用中关键词之间可能会有很多前缀相同现象,所以实际耗费空间并不会很高。

11.java项目开发总结 篇十一

关键词:Java程序设计;项目驱动教学模式

中图分类号:TP311.52 文献标识码:A 文章编号:1007-9599 (2012) 10-0000-02

在目前的java程序设计教学中,普遍存在着课本不及时更新,无法摆脱应试模式框架,以及教育与实际脱轨等一系列的问题。而java程序设计是一个对学生的操作和实践很有依赖性的学科,所以,只有选择项目驱动教学的方式,才能使得学生的实践和操作能力得到一定的发展,更好地学习java的程序设计。

一、什么是项目驱动教学

项目驱动教学法是指通过进行一个完整的项目工作,来达到教学的目的,让知识和学生的动手能力都可以得到很好的进步。项目驱动教学模式主要应用于计算机软件这种比较复杂,学生可以借助项目的发展,来接受一些诸如程序设计之类的知识系统。

二、项目驱动教学模式的意义

项目驱动教学模式可以具体针对每一个学生来进行程序设计的教学。通过分组讨论等方式,可以使得学生的思路更清晰,更好地掌握java程序设计的知识理论。可以大大提高学生的学习兴趣和实践能力,使得高职院校更好的和社会接轨。所以,项目驱动教学模式是一种具有划时代意义的教学史上的重大改革。

三、就java程序设计对项目驱动教学模式的研究

(一)如何选择授课项目

项目的选择应该与当下社会的发展趋势相匹配,这样的授课项目才可以与时代的发展接轨。项目的选择要根据授课时间、授课地点以及学生的学习能力来判断。如果项目过难,学生不易接受,反而达不到预期的效果。反之,项目过易,学生的积极性不容易被调动起来,也容易达到事倍功半的效果。如果项目的基体过于庞大,教师很难完全的对项目进行细致的分析,会影响教学的完整性。而项目的技术含量如果太高,就会使得学生失去学习的兴趣,打击学生对项目研究的勇气和信心。所以,教师应该根据学生的接受能力,授课的周期来具体分析,为学生选择合适的项目来进行授课作业。

(二)如何合理安排学生分组和授课进度

授课项目的选择是为了完成整个学期的学业。所以项目的安排要合理地分散于学生学习的一个周期之内。根据授课的进度,适当增加项目的难度以及技术含量。这样比较利于学生的学习积极性和学习兴趣一直处于一个合理的状态,避免了填鸭式教学的传统弊病。

学生的分组可以按照学生的接受能力和领导组织能力。领导组织能力强的同学可以作为每个小组的组长,接受能力高的同学可以作为副组长。这样就能更有利地组织学生来一步步完成项目的每个阶段。并且能更好地激发学生的团体协作精神和部分同学的领导力,并且可以大幅度减少教师的教学负担。还能使得学生更好地适应今后的工作。

(三)如何进行项目驱动教学

1.教师讲解软件开发的环境

在授课的开始,教师一定要本着当下软件开发的环境为学生作深入细致的讲解。当下,软件开发企业为了降低成本,提高速度,使用的是一体化的集成设备,即把数据库,服务器等集成在一起,这就增加了学生学习的难度,使得原本简单的东西复杂化。

Java的后台程序都是英文版的,这就要求教师更合理地引导学生来正视软件开发的难度,同时借助语言,肢体,以及软件的实际操作来打消学生的负面心理,提高学习的积极性。

2.确定授课的软件

在教学过程中,一定要选择合适的授课软件及其辅助工具。因为java的程序设计不但要求学生知道程序设计的目标,更要让学生知道该过程及其原理,以及软件开发的条件和必备工具。在授课初期,教学过程一定要采用可视化的软件,这样可以使得学生更直观地看到程序的管理,编程等的产生和形成。在授课达到一定程度之后,再采用非可视化的开发工具,锻炼学生的能力,使得学生更好地掌握软件开发的知识,更好地锻炼学生的动手能力和操作能力。

3.授课的考核

在当下,传统的考核方式已经不再适应项目驱动授课的教学模式。在项目驱动的模式下,我们不应该只用笔试,口试的方法对学生的能力和知识量来进行评定。在此,我们应该在教学到了某一进度时,让学生亲自动手制作某软件或者某程序。例如:让学生自己动手来编程,而不是让学生在纸上填写编程代码。当学生的考核完成以后,由学校的权威专家来逐个评判考核的结果,并评分,计入考核档案。这样才能防止某些学生作弊,更好地体现考核的权威性和公平性。

4.教学实践

当学生的考核完成并且合格以后,就应该让学生来参加实践。实践可以是教师根据企业的发展来设计出的项目,也可以是学生自己寻找的项目,无论如何,都要和日后学生即将步入的社會相适应,不可以搞形式主义,让学生空有一身知识而无处倾泄。实践可以更好地锻炼学生的动手能力,以及对之前的知识更为系统地掌握和消化。并且能让学生更为自信的走向社会。

5.引导学生就业

当学生的知识掌控的比较随心所欲,并且动手操作能力也能得心应手时,教师应该主动引导学生走向社会,即让学生就业。根据学校的优惠政策和人脉关系,为学生选择一个适合的行业来发挥他们的最大才能。初入社会的学生并不懂得社会上的一些潜规则和人际交往,教师应该用委婉的语言向学生合理解释,如果话说的太直接,容易导致学生对社会产生恐惧的心态,打消学生走向社会的积极性。学生应该努力自己走向社会,用自己的知识和能力,选择合适的就业岗位,并且在教师的帮助下,把自己的一切做到最好,发挥自己最大的优势适合自己的空间。

四、小结

项目驱动的教学模式现在的我们已经不陌生,它的作用是把教学和实践完美的结合在了一起。杜绝了以往学生只知理论,不懂社会实践的尴尬局面。学生步入社会以后可以更快,更好地接受社会所给于的压力,及时把自己的知识应用在工作中。所以,项目驱动的教学模式是今后教育改革的必由之路。

参考文献:

[1]马玉青.计算机绘图教学中应用“任务驱动”教学法初探[J].职业教育研究,2005,(10)

[2]姜大源.职业教育专业教学论初探[J].教育研究,2004,(05)

[3]张哲,陈桂生.在Java语言教学中实施“项目驱动”教学法的实践探索[J].教育与职业,2007,(18)

[4]张党省.论职校教师在项目教学法中的角色[J]. 科教文汇(下半月),2006,(09)

[5]岳云峰,顾晖,李跃华.计算机硬件课程教学中的项目驱动教学法[J]. 南通大学学报(教育科学版),2007,(03)

[6]吴言.项目教学法[J]. 职业技术教育,2003,(07)

[7]兰景英,范勇.基于项目驱动的软件测试人才培养模式[J].计算机教育,2011,(6):10-13

[8]陆芸婷.基于工作过程的《数据库基础》课程设计[J]. 中国科技信息,2009,(15):269-271

[9]朱雄军,杨旭东,陈晴.高职计算机网络专业基于工作过程的课程体系设计[J].职业技术教育,2008,(5):32-33

[10]罗伟,张莹,张翠英.基于“工作过程”的铁道技术专业课程体系构建[J].陕西教育(高教版),2008,(3):34

12.java项目开发总结 篇十二

1 JSR82规范

2002年,Java开发社区发布了基于Java平台的蓝牙API规范JSR82。JSR82规范对支持JAVA嵌入式设备的JAVA应用编程接口做出了明确规定,提供了一系列的标准API,可以帮助JAVA嵌入式设备无缝集成蓝牙环境。

Java蓝牙无线技术API包含两个包,javax.bluetooth和javax.obex。javax.bluetooth包含了核心的蓝牙API,如蓝牙设备管理,蓝牙设备发现,蓝牙服务查找、L2CAP等类。javax.obex属于高级API,是一个不依赖于蓝牙核心API的数据交换包。

javax.bluetooth包定义了4个接口,6个类和3个异常。其中LocalDevice类、RemoteDevice类和DeviceClass类属于设备管理API;UUID类、DataElement类、Discorylistener接口、DiscoveryAgent类和SeviceRecord接口属于服务发现API;L2CAPconnection接口和L2CAPconnectionNotifier接口属于连接API。

2 蓝牙应用程序模型

每一个蓝牙应用都表现为一个蓝牙服务,提供服务的一方为服务端,消费服务的一方为客户端。蓝牙客户端的行为包括初始化、发现周围服务和设备、消费服务等,蓝牙服务端的行为包括初始化、创建服务、注册服务、等待客户端访问、创建连接提供客户端消费等。

具备蓝牙功能的应用程序必须先要初始化蓝牙堆栈,一个客户端对远端服务进行消费时首先要发现所有附近的设备,然后对每一个发现的设备搜索它感兴趣的服务,而提供服务的服务端在服务发现数据库(SDDB,Service Discovery Database)中对客户端进行注册,对他们进行有效广播,然后等待引入的连接,在他们进入时接受他们并为他们提供服务。最后,当不再需要服务时,应用程序会在服务发现数据库中将他们移除。

2.1 初始化

无论蓝牙客户端还是服务端,都首先要进行初始化,通常为初始化UUID类、获得LocalDevice类等操作。服务端需要设置LocalDevice,让设备处于可发现状态,设置发现模式,而客户端不用设置发现模式。

在javax.bluetooth中,UUID类用来唯一识别一个蓝牙服务,每一个这样的标识符都要在时空上保证唯一。UUID类有16位或32位的简短UUID或128位的完整UUID。一般在创建时要生成自己的UUID,在服务搜索时要同时给出指定的UUID和通信协议的UUID。

设备管理API中的LocalDevice类代表本地蓝牙设备,初始化时首先通过getLocalDevice()方法取得LocalDevice对象实例,然后调用setDiscoverable()方法设置发现模式。有三种发现模式:DiscoveryAgent.GIAC代表无时间限制模式,DiscoveryAgent.LIAC代表在规定的时间内可被搜索,超时就进入不可搜索状态,DiscoveryAgent.NOT_DISCOVERABLE代表不可搜索状态。

示例代码如下:

2.2 服务端操作

1)创建服务并注册:

利用UUID计算URL,创建L2CAPConnectionNotifier连接(对应L2CAP)或StreamConnectionNotifier连接(对应SPP)。利用LocaIDevice取得对应此L2CAPConneCtionNotifier连接的服务ServiceRecord。如有必要,可以使用DataElement来设置ServiceRecord的属性。

2)等待客户访问:

调用ConnectionNotifier的方法,等待连接。

2.3 客户端操作

1)发现周围设备和服务:

在蓝牙网络中,客户端通常不能直接得到服务端的蓝牙地址,要使用服务发现API搜索周围的设备和服务。为消费一项指定的服务,客户端需要经过三个步骤:搜索设备、搜索服务和连接通信。服务发现API包括DataElement类、Discoverylistener接口、DiscoveryAgent类和ServiceRecord接口。

首先通过LocaIDevice取得DiscoveryAgent对象。利用该对象发起一次设备查询,设备找到后会调用DiscoveryListener接口对应的方法,记录下远端设备RemoteDevice。再次通过DiscoveryAgent对象,并提供刚刚找到的远端设备,发起一次服务查询来查询感兴趣的远端服务。服务找到后会调用DiscoveryListener接口对应的方法,将ServiceRecord服务记录下来。至此,一次完整的搜索结束,得到了感兴趣的ServiceRecord列表。

示例代码如下:

2)消费服务:

通过ServiceRecord的相应方法可以取得远端服务的URL。这样就可根据服务的类型选择创建对应SPP的StreamConnection或对应L2CAP的L2CAPConnection来进行数据通信了。

2.4 蓝牙连接

蓝牙支持RFCOMM和L2CAP两种类型的连接。蓝牙API使用通用连接框架的StreamConnection和StreamConnectionNotifier支持RFCOMM,连接类型L2CAPConnection和L2CAPConnectionNotifier用于支持L2CAP。创建连接需要使用Connection.open(String urlName)方法,参数urlName代表了连接的URL,格式如下所示:

sheme://host:port;parameters

其中scheme代表了连接的类型,对应RFCOOM为btspp,对应L2CAP为btl2cap。

host对应服务端为localhost,对应客户端为远端蓝牙地址。

port对应服务端为UUID,对应客户端为服务端口。

parameters指定了可选的设置,如服务名称或MTU大小。

使用服务端连接时,首先通过L2CAPConnectionNotifier或StreamConnectionNotifier建立连接,同时创建一个蓝牙服务。

L2CAPConnectionNotifier notifier=(L2CAPConnectionNotifier)Connector.open(url);

然后调用acceptAndOpen()方法,该方法会自动将服务注册到蓝牙发现数据库SDDB中,之后就可以被客户端搜索了。

L2CAPConnection con=notifier.acceptAndOpen();

使用客户端连接时,也是通过Connector.open(url)建立连接,参数url通过serviceRecord.getConnectionURL()取得,例如:

3 结束语

蓝牙技术拥有连接简单、互操作性强的特点,在无线办公、电子支付、汽车工业、信息家电、医疗设备等领域中有着广泛的应用。基于Java的JSR82规范开发无线蓝牙应用程序,继承了Java语言优秀的平台无关特性,可以大大增加程序的可移植性。

摘要:介绍了Java蓝牙无线技术API规范JSR82,并给出了采用JSR82规范开发蓝牙无线应用程序的具体实现方法和部分实例代码。

关键词:蓝牙,Java,JSR82

参考文献

[1]詹建飞.J2ME开发精解[M].北京:电子工业出版社,2006.

[2]詹建飞.JavaME核心技术与最佳实践[M].北京:电子工业出版社,2007.

13.java项目实训文档 篇十三

项目名称:在Netbeans下实现记事本程序

设计内容:仿照windows提供的记事本设计一个功能类似的程序 具体设计:

一、建立项目

1、开始之前

使用NetBeans IDE开发JAVA程序,需要安装如下软件: l J2SE(TM)Development Kit(JDK),版本最好是1.5以上 l NetBeans IDE5.5.1 这两个软件都是免费的,可以到网上下载。下载完毕后需要先安装好JDK,然后再安装NetBeans IDE5.5,安装完毕后,就可以打开NetBeans IDE5.5.1,开始我们的学习历程了。

2、建立记事本项目

NetBeans是以项目的方式来管理程序的,通常一个程序就是一个项目。所以我们创建JAVA程序的第一步就是建立项目。(1)选择NetBeans的文件菜单——新建项目,根据向导(如图1所示)选择“常规”,“ java应用程序”,然后转入下一步。

(2)向导的第二步如图2所示,需要设置项目的一些信息。我们把项目名称定为NoteSys,设置好项目保存位置,此时先不创建主类,所以去掉创建主类复选框的对号,单击完成即创建好一个项目

(3)项目建立之后NetBeans界面如图3:

知识点整理:

l 从图1可以看到,使用NetBeans还可以创建web程序和企业程序,我们这里创建的是桌面应用程序。

l 可以在建立项目时创建主类,也可以不创建,留到项目建立好后再创建

l 项目建立好之后就可以在NetBeans IDE环境中看到刚才创建的项目(图3)。NetBeans的文件组织分为两种方式:项目组织方式和文件组织方式。

项目组织方式中整个项目(NoteSys)包括:源包、测试包、库和测试库,源包再由若干java文件构成。

文件组织方式按照实际的物理存放目录组织,即项目在硬盘上的存放路径。整个项目(NoteSys)包括src、build等几个文件夹。l 项目建立好后,在源包上单击右键可以创建包和其他的java文件,在创建的包上单击右键也可以创建各种java文件,见图4

经过这样几个步骤,我们就建立了一个桌面程序项目NoteSys,接下来就是在IDE中对项目进行开发,首先我们先看如何建立程序的界面。

二、构建记事本GUI界面 NetBeans IDE 的 GUI 生成器经过了不断的改进,截至 NetBeans 5.0 版本时,它已变得更为强大、更具直观性了。用户无需深入了解布局管理器,就可以生成具有专业外观的 GUI。在NetBeans中以可视化的方式来生成界面,我们只需将组件放置在所需的位置,就可以完成窗体布局的设置。下面的步骤将带领大家制作记事本的界面,也会让大家领略到NetBeans中构建GUI界面的方便和高效。

1、建立窗体

在项目视图的源代码包上单击右键创建一个包(包名为qiu.notesys),然后在qiu.notesys包上单击右键创建一个jFrame类(类名为WinNote.java),此即为记事本的窗体,我们将在该窗体上添加其他组件构建记事本的界面。如图5

根据图5,NetBeans 的GUI 生成器的各种窗口包括:

l 项目和文件区域:显示整个项目的文件,采用项目和文件两中方式组织。可以通过该窗口管理java文件,包括对java文件的新建,删除,编译,运行等操作 l 检查器:提供所有组件的表示,包括在应用程序中表示为树状分层结构的可视和非可视组件。并允许您在可用面板中组织这些组件,而且添加组件,设置组件的属性和事件也可以在检查器内完成。

l 设计区域:GUI 生成器用于创建和编辑 Java GUI 窗体的主窗口。通过使用工具栏的“源”和“设计”切换按钮,可以查看类的源代码或其 GUI 组件的图形视图。

l 组件面板:可用组件的可定制列表,包含 JFC/Swing、AWT 和 JavaBean 组件的标签以及布局管理器。此外,还可以使用定制器来创建、删除和重新排列组件面板中显示的类别。

l “属性”窗口。显示 GUI 生成器、“检查器”窗口、“项目”窗口或“文件”窗口中当前选定组件的属性。

l 调试和输出窗口:位于窗口的最下方,显示调试程序的信息和输出信息。注意:如果单击“源”按钮,IDE 将在编辑器中显示应用程序的 Java 源代码,其中包含 GUI 生成器自动生成的代码部分,这部分以蓝色区域表示,称为“被保护的块”。被保护的块是“源”视图中无法编辑的受保护区域。处于“源”视图中时,只能编辑出现在编辑器白色区域中的代码。如果需要对被保护的块中的代码进行更改,请单击“设计”按钮以便从 IDE 的编辑器切换到 GUI 生成器,然后在生成器中对窗体进行必要的调整。保存更改时,IDE 将更新文件的源代码 窗体建立好了,整个界面的基础也就有了。下面我们就可以在该窗体上添加其他组件,来完成整个界面工作了。

2、添加菜单(1)加入菜单

l 在组件面板中选择JMenuBar,将其拖拽入我们的JFrame主窗体。

l 在设计视图时,屏幕右侧的检查器会检查出所有的可视组件,我们在检查器中找到刚才推拽的JMenuBar,点击右键,在右键弹出菜单中选择【更改变量名称…】,此时弹出重命名窗体,我们在新建名称中填写jmb,然后点击“完成”按钮,此时我们的JMenuBar就成功创建了。

l 对于每个菜单来说,还需要创建一个菜单对象,然后把此顶层菜单添加到菜单栏中,接着在菜单对象中添加菜单项、分隔符以及子菜单。对于【文件】è【新建】而言,我们应首先将【文件】这个菜单对象创建,然后将【新建】菜单项添加到【文件】菜单选项中。参考图6,具体步骤如下:

i.在检查器中,右键点击jmb,在弹出菜单中,选择【添加JMenu】,此时检查器中在jmb下面添加了一个新的JMenu菜单对象。

ii.右键点击JMenu菜单对象,在弹出的右键菜单中选择【更改变量名称…】,将其新建名称更改为“fileMenu”。

iii.右键点击“fileMenu”菜单对象,在弹出菜单中选择【添加】è【JMenuItem】(可在此菜单中添加菜单项,分隔符,子菜单等),此时在“fileMenu”菜单对象中添加了一个菜单项,我们将此菜单项更名为“newMenu”。这样文件菜单和新建菜单项就建立好了。

知识点整理: l 添加组件的方法

(1)到组件面板单击需要的组件

(2)移动鼠标到窗体,此时刚单击过的组件会跟随鼠标移动,并且靠近窗体边缘或其他组件附近时,会出现虚线来指示放置组件的位置。(3)确定好放置位置后,再次单击鼠标即可把组件添加好 l 修改组件大小

添加组件之后,单击组件,组件周围会出现一些白色方块,把鼠标移动到其上,拖动鼠标则可改变组件大小

右击组件,在菜单中选中“自动调整大小”的垂直和水平菜单,则运行程序时,组件会随着窗口的大小变化而变化。l 对齐组件 添加组件时,NetBeans提供了虚线指示,所以很容易对齐组件。此外,按住shift键选择多个组件,使用设计区域上方的一组对齐按钮也可对齐组件 l 菜单组件

NetBeans 中通过JMenuBar组件来创建菜单,添加JMenuBar后,通过右击检查器中的JMenuBar可以添加顶层菜单,通过右击顶层菜单可以添加菜单项和分割线等,而顶层菜单和菜单项的变量名称和显示文字等可以通过其右键菜单来设置。

(2)关于菜单的几个操作 l 给菜单添加图标

菜单项显示图标会使菜单看上去更加美观,而且含义清晰的图标也会增加程序的易用性,所以我们有时需要给菜单添加一些图标。方法如下:

右击源包建立一个包(名称为res),通过该包的物理路径向该包内放一些图标,然后打开菜单项的属性窗口,通过菜单的ico属性,指定类路径选项,然后选择包res中的图标文件就可以把图标加入到菜单中。下面以新建菜单为例:

在检查器中,右键点击“newMenu”,在弹出菜单中,选择【属性】,此时弹出一个可以修改属性和事件的对话框,我们选择属性选项卡,找到ico属性,点击ico属性对应的按钮,如图7:

此时弹出一个图片选择对话框,我们选择类路径,并在当前类路径下选择图片文件,点击“确定”按钮,这时我们菜单的图片就添加上了 l 给菜单设置加速键

加速键的作用就是程序运行中可以通过使用ALT加字母的方式快速打开菜单。NetBeans中,在菜单的text属性指定的名字后面加上一个括号和一个大写字母,例如新建的text为“新建(N)”然后把属性mnemonic设置成刚才指定的大写字母即可,此时通过ALT加该字母就可以访问该菜单了 l 给菜单设置快捷键

菜单的快捷键可以使用户用快捷键来执行某个菜单的操作。切换到代码编辑器窗口,在代码编辑器中创建一个方法setMenuAccelerator,在方法中为需要设置快捷键的菜单加入设置语句即可,新建菜单的快捷键设置如下

这样,当我们按下Ctrl+N时,就可执行新建命令了。最后在主类(WinNote.java)的构造方法中调用该方法即可。知识点整理:

l NetBeans中,在可视化的方式中就可以顺利完成菜单的各种复杂设置,包括顶层菜单、菜单项、分割线等的添加以及其他菜单的相关设置

l 菜单使用的图标我们事先放到了一个包内,然后以类路径的方式加入到了菜单中,这样类路径并不依赖某个具体路径,所以使程序易于移植。(3)按照刚才的方法给记事本添加表1所示的菜单 菜单项 菜单变量名 快捷键 加速器

【文件】è【新建】 【fileMenu】è【newMenu】 FèN Ctrl+N 【文件】è【打开】 【fileMenu】è【openMenu】 FèO Ctrl+O 【文件】è【保存】 【fileMenu】è【saveMenu】 FèS Ctrl+S 【文件】è【退出】 【fileMenu】è【exitMenu】 FèX

【编辑】è【剪切】 【editMenu】è【cutMenu】 EèT Ctrl+X 【编辑】è【拷贝】 【editMenu】è【copyMenu】 EèC Ctrl+C 【编辑】è【粘贴】 【editMenu】è【pasterMenu】 EèP Ctrl+V 【编辑】è【全选】 【editMenu】è【selectAllMenu】 EèA Ctrl+A 【格式】è【颜色】 【editMenu】è【colorMenu】 EèF Alt+F 【帮助】è【关于】 【helpMenu】è【aboutMenu】 HèA

3、添加工具栏

NetBeans中,工具栏由JToolBar组件和按钮(JButton)组件组合起来实现的。我们首先在组件面板中找到JToolBar组件,并将其拖入我们的主窗体,然后根据需要在jtoolBar中放置一些按钮,设置好按钮的ico(图标)和tooltiptext(按钮提示)属性

设计表2所示的工具栏

放置顺序 变量名称 功能 工具提示 1 newButton 新建文件 新建 openButton 打开本地文件 打开 3 saveButton 保存文件到本地 保存 4 cutButton 剪切 剪切 5 copyButton 拷贝 复制 6 plasterButton 粘贴 粘贴

4、加入文本框

NetBeans提供几个显示编辑文本的组件,我们使用JTextArea来实现。从面板中找到JTextArea,加入到窗体上

这样,我们的记事本界面就制作完毕了,在项目窗口中,找到WinNote.java,右击选择编译文件,NetBeans则对该文件进行编译,编译成功后,在运行文件即可启动程序,运行效果如图8:

三、打开与保存

在上一节中我们已经完成了记事本的界面,也从中学习了一些构建GUI的方法和技巧。从本节开始将要讨论记事本的功能开发,先看如何打开和保存文件。当然在叙述过程中会讲解如何使用NetBeans的代码编辑器的一些用法。

1、打开文件

使用记事本打开一个已有的文本文件需要涉及到如下问题: l 如何控制要打开文件的类型,即只能打开文本文件 l 打开对话框如何实现

l 如何从硬盘上读入文件内容到记事本中 下面依次讨论这三个问题的解决方案

(1)控制要打开文件的类型——FileFilter类

JAVA中的FileFilter类可以很好的解决这个问题,FileFilter 是一个没有默认实现的抽象类。一经实现便可以设置在 JFileChoose上,以阻止不需要的文件出现在目录清单中。所以我们自己写一个类继承自FileFilter,然后实现FileFilter类的方法即可,具体如下:

l 右击qiu.notesys包新建一个类(名称为TextFilter),此时该类的内容如下

l 在类名TextFilter后输入extends FileFilter,即继承自FileFilter类。此时NetBeans代码编辑器会自动扫描代码,发现该行代码的错误并且用红线标出,这时把鼠标移动到该行,NetBeans会提示你错误的原因:由于我们并没有引入FileFilter类就直接使用了,所以这里提示“找不到FileFilter类”,单击该行任意位置会在行左边出现一个灯泡,单击灯泡,NetBeans会给出你修改错误的方法,现在从提示里选择“添加javax.swing.filechooser.FileFilter的import”,NetBeans就会自动把对FileFilter类的引入加上,而不需要我们去手动添加。此外,因为FileFilter类是一个抽象类,所以必须实现其所有的抽象方法,因此现在还提示有错误,再次单击该行,从灯泡的提示中选择“实现所有抽象方法”,NetBeans就会自动把FileFilter的所有抽象方法添加上,此时代码窗口内容如下: 其中标红的都是代码编辑器自动添加的。从此处也可以看出使用NetBeans写代码会非常的省时省力。

l 最后我们实现TextFilter类的抽象方法,代码如下

这样就实现了一个只显示“txt”或“doc”类型文件的过滤器类TextFilter,用他可是方便的过滤文件。知识点整理: l 代码编辑器可以自动查找代码错误,并标出红线提示,此时把鼠标放到错误行上面会出现错误原因的提示

l 单击错误行前的小灯泡,代码编辑器会给出修改错误方案并能自动修复错误 l 书写代码时可以不用过分考虑代码的缩进格式,代码写完后使用“Ctrl+Shift+F”组合键,代码编辑器会自动调整代码格式(2)打开已有文件——jFileChooser组件

NetBeans提供了一个文件选择组件——jFileChooser,为用户选择文件提供了一种简单的机制,使用他可以方便调用打开对话框和保存对话框。我们首先添加一个jFileChooser,其用法在下一步中介绍。添加该组件的具体操作是:

在项目中选择WinNote,切换到设计视图,此时检查器中会显示WinNote的所有组件以及组件之间的组织层次,由于打开对话框是独立的,并不依附主窗口,所以我们把该组件添加到“其他组件”内,在“其他组件”上右击,从组件面板上添加——SWING——jFileChooser,即可把jFileChooser添加到项目中,此后我们就可以使用它了。

(3)读入文件——java中的I/O操作

JAVA中为实现文本输入输出提供一些专门的类,常用的有FileReader、FileWriter和BufferedReader、BufferdWriter几个类。这里我们综合利用BufferedReader、FileReader以及刚才的jFileChooser组件来完成对文件的打开操作,此外,打开操作是通过打开菜单来激发的,所以我们首先实现打开菜单的事件,参见图9 l 切换到WinNote的设计视图

l 到检查器窗口找到“打开”菜单并选中(此时右击也可添加一个事件)

l 右侧的属性窗口会显示该菜单的相关信息,选择事件,该窗口就列出了该菜单支持的所有的事件

l 找到actionPerformed事件,单击后面的按钮,就可以打开添加事件的对话框,添加一个事件即可

添加好事件后,给事件添加如下代码:

知识点整理:

l NetBeans中通过属性窗口可以方便的给组件和菜单添加事件和管理事件,而不用考虑过多的事件内部细节 l JAVA中的输入输出

(1)FileReader类是用来读取字符文件的便捷类,在给定了需要读取数据的文件名的情况下创建一个新 FileReader,然后使用其read方法可以读取字符流,但其所作的每个读取请求都会导致对基础字符或字节流进行相应的读取请求,效率很低。

(2)BufferedReader从字符输入流中读取文本,缓冲各个字符

(3)根据(1)(2),我们可以用 BufferedReader 包装read()操作效率很低的FileReader,采用如下方式:

BufferedReader in = new BufferedReader(new FileReader(filename));这样,用FileReader读取指定的文件,然后用BufferedReader来缓冲,最后在用read或readline方法读取文件。避免了每次调用 read()或 readLine()都会从文件中读取字节,并将其转换为字符后返回的低效做法

此外,FileWriter是写入字符文件的便捷类,用于写入字符流。BufferdWriter类提供缓冲,因此也可以综合使用这两个类完成写入文件的操作。

2、保存文件

保存文件的实现和打开非常类似,也是通过TextFilter类控制保存的文件类型,通过jFileChooser来调用保存对话框,通过文件输入输出操作来写文件。具体做法请读者自己研究。

四、其他功能的实现 有了打开与保存,我们的记事本已经可以操作文件,本节将带领大家完成记事本剩余的几个重要功能。

1、剪切操作

添加好剪切菜单的actionPerformed事件,在事件内写如下代码 editor.cut();其中editor是文本框jTextArea。这样就实现了剪切操作,其余的全选、复制、粘贴与此类似,不再细说

2、文本颜色

NetBeans提供了一个jColorChooser组件,使用它可以方便的实现颜色设置。该组件显示有模式的颜色选取器,在隐藏对话框之前一直阻塞。如果用户按下“OK”按钮,则此方法隐藏/释放对话框并返回所选颜色。如果用户按下“Cancel”按钮或者在没有按“OK”的情况下关闭对话框,则此方法隐藏/释放对话框并返回 null。因此,我们添加一个jColorChooser,利用它选取颜色即可。参见图10 在检查器窗口内右击“其它组件”,添加一个jColorChooser,修改变量名为ColorChooser,然后添加颜色菜单的事件,在事件内加入如下代码:

第一句代码创建了一个Color对象,该对象返回了jColorChooser组件中被选择的颜色(jColorChooser的构造方法中的三个参数分别是:对话框的父

Component,对话框标题和显示颜色选取器时的初始 Color 设置),第二句代码则是设置文本颜色。

3、撤销操作

JAVA中提供了撤销管理器类——UndoManager,通过该类提供的方法,我们可以方便实现撤销与恢复操作,具体操作如下:

l 首先声明一个UndoManager的对象,代码如下: UndoManager undoManager = new UndoManager();l 因为撤销和恢复都是针对文本框进行的,所以需要对文本框jTextArea进行监视,打开文本框的AncestorAdded事件,填入如下代码

这样撤销管理器就有效的对文本进行监视,一旦需要撤销或恢复操作,直接调用撤销管理器的方法即可

l 最后在撤销菜单的actionPerformed事件中写一句“undoManager.undo();”,在恢复菜单的actionPerformed事件写一句“undoManager.redo();”就可以了。

4、新建与退出

新建与退出都会涉及到如下两个问题: l 如何判断文档是否发生变化

l 若文档已改变,如何调用对话框询问用户是否保存当前文档

对于第一个问题,文本组件jTextArea没有提供相关方法,但是我们可以定义一个全局变量,让他存储初始的文档内容,然后新建或退出时在比较该变量和当前文档内容,相同则不必询问是否保存,否则调用对话框询问是否保存。

对于第二个问题,使用jOptionPane组件即可实现,JOptionPane 有助于方便地弹出要求用户提供值或向其发出通知的标准对话框,对JOptionPane组件的方法调用通常有如下几个: 方法名 描述

showConfirmDialog 询问一个确认问题,如 yes/no/cancel。showInputDialog 提示要求某些输入。

showMessageDialog 告知用户某事已发生。

showOptionDialog 上述三项的大统一(Grand Unification)。

每个调用方法的参数很多,这里不再细说,请查看API手册,我们使用JOptionPane组件的第一个方法showConfirmDialog来实现新建和退出需要的对话框。

(1)新建代码

(2)退出

退出代码与新建类似,也是判断文档是否改变,然后通过对话框提示用户是否保存,然后在退出。

5、帮助与关于窗口的制作

关于的主要目的是通过一个窗口展示有关于程序的一些信息和作者的相关信息,这里我们建立一个jPanel窗口类,然后在窗口上添加JTabbedPane、jPanel、jLabel等几个组件就可以实现了。具体操作如下: l 右击qiu.notesys包,添加一个jPanel窗口类 l 找到检查器中的jPanel,右击,添加JTabbedPane组件,再右击JTabbedPane,添加两个jPanel组件,这时JTabbedPane就有了两个选项卡:tab1和tab2,这两个选项卡是由jPanel组件构成的。最后在分别给两个选项卡添加几个jLabel。

l jLabel组件可以显示文字和图片,所以根据情况添加相关信息就可以了,最后通过主类WinNote的关于菜单调用该窗口即可。效果如图11:

知识点整理

l 全选、复制、粘贴和剪切等操作使用jTextArea组件自身的方法就可以实现 l 文本颜色使用jColorChooser组件实现。我们并没有讲解如何实现字体设置功能,因为NetBeans没有提供字体对话框组件,需要我们自己设计实现字体对话框的功能,因为有些复杂,所以没有讲,请参看我的源代码

l 撤销操作有撤销管理器类UndoManager实现,可以连续多次撤销或恢复 l 新建与退出用到了JOptionPane组件,它可以方便地弹出要求用户提供值或向其发出通知的标准对话框

l 帮助和关于窗口使用了JTabbedPane组件,它允许用户通过单击具有给定标题和图标的选项卡,在一组组件之间进行切换,一般采用jPanel组件作为选项卡间的切换组件。

五、NetBeans中的项目操作 经过前面的学习,相信大家已经能够做出一个简易的记事本程序了,接下来就要思考如何完成这个项目,并且能够让项目独立运行。现在,我们来学习NetBeans中对整个项目的几个操作。

1、运行项目 l 设置主类

我们知道JAVA必须从主类开始运行程序,所以需要指定好主类。一般在我们创建项目时就指定好了主类,如果没有可以右键单击项目节点,选择“属性”,然后在对话框左窗格中选择“运行”节点,从这里可以设置主类。

l 运行主项目

从“运行”菜单中选择“运行”——“ 运行主项目”(或使用F6键)。NetBeans就会编译并运行程序,然后输出结果,双击“输出”窗口将其最大化,以便查看所有输出内容。按 F6 键再次运行程序。但这次只是运行程序,并不需要编译任何新内容。

2、清理并生成项目

l 选择“生成”——“ 清理并生成主项目”(Shift-F11)。将清理项目,然后将其作为进程的一部分重新生成。

3、生成Javadoc l 选择项目

l 从 IDE 的主菜单中,选择“生成”——“为NoteSys生成 Javadoc”。IDE 将在“输出”窗口中显示 Javadoc 输出,并打开 Web 浏览器以显示 Javadoc

4、调试项目

l 打开记事本的WinNote.java 文件,转至打开菜单的事件代码,并将插入点放在“t=in.readLine();”,然后按 Ctrl-F8 组合键给该行设置一个断点(或鼠标单击行号)。

l 选择“运行”——“ 调试主项目”(F5)。IDE 将打开调试器窗口,并在调试器中运行该项目,启动记事本程序后,单击记事本的文件菜单——打开,这时程序执行到了断点处,停止

l 选择“局部变量”窗口,会看到这里列出了很多的局部变量值,选择变量t,此时t为空值(因为还没有读入数据)。

l 在工具栏中单击“步入”(F7),逐步执行程序并观察变量t,会发现t在一行一行的把文件的内容读取出来。

l 单击“运行”菜单——“继续运行”(ctrl+F5)就会关闭调试器窗口,继续执行到程序到完毕

上一篇:优秀班主任讲座下一篇:请问辞职报告(补)?