﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-study-文章分类-JAVA相关</title><link>http://www.blogjava.net/xixidabao/category/10247.html</link><description>GROW WITH JAVA</description><language>zh-cn</language><lastBuildDate>Fri, 28 Sep 2007 06:05:55 GMT</lastBuildDate><pubDate>Fri, 28 Sep 2007 06:05:55 GMT</pubDate><ttl>60</ttl><item><title>ERP的过去、现在与未来</title><link>http://www.blogjava.net/xixidabao/articles/148962.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Fri, 28 Sep 2007 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/148962.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、概述&nbsp;企业信息化建设在我们国家已经走到了相当被重视的阶段，而ERP又是企业信息化建设的重要解决方案，所以下面我们来谈谈ERP的过去、现在与未来。&nbsp;&nbsp;众所周知，ERP是Enterprise Resource Planning的缩写，即企业资源计划，它是由最初的MRP（物料需求计划）、MRP-II (制造资源计划)逐渐发展而来的。90年代初...&nbsp;&nbsp;<a href='http://www.blogjava.net/xixidabao/articles/148962.html'>阅读全文</a><img src ="http://www.blogjava.net/xixidabao/aggbug/148962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2007-09-28 09:42 <a href="http://www.blogjava.net/xixidabao/articles/148962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ERP介绍</title><link>http://www.blogjava.net/xixidabao/articles/147537.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Sun, 23 Sep 2007 04:25:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/147537.html</guid><description><![CDATA[<div class="sysBr500 text" align="left"><font size="2"><strong><font size="3"><font size="4">ERP介绍</font><br />
</font></strong>ERP（企业资源管理计划）——Enterprise Resources Plannig，是在先进的企业管理思想的基础上，应用信息技术实现对整个企业资源的一体化管理。ERP是一种可以提供跨地区、跨部门、甚至跨公司整合实时信息的企业管理信息系统。它在企业资源最优化配置的前提下，整合企业内部主要或所有的经营活动，包括财务会计、管理会计、生产计划及管理、物料管理、销售与分销等主要功能模块，以达到效率化经营的目标。<br />
ERP自90年代后期从美国传入，为我国的企业体制改革注入的新的活力，ERP已成为大型现代企业管理中不可或缺的有力管理工具，是企业现代化和信息化程度的重要标志。ERP项目是一个企业管理系统工程，而不是一般意义上的企业管理信息系统工程或者是企业信息化建设工程，这是因为整个管理系统不但基于ERP、系统工程和信息技术等现代科学技术的思想、原理和方法，而且还从本质上充分地体现了企业应用ERP与开展企业管理创新、推进企业管理现代化和提高企业竞争力的必然关系。<br />
1、销售：销售部门接客户采购计划，根据客户要求，查看是否有库存，有——即给客户发货；无——即下生产任务给生产部门，要求安排生产；待成品机器完工后，即可给客户发货。<br />
2、生产：生产部门接销售部任务，向生产车间下达生产任务，可依据库存，向采购部门请购有关零部件。完工后，入库供销售部发货。<br />
3、采购：采购部门依据所接请购任务和库存情况，向材料供应商采购料品。<br />
4、库存：仓库根据零部件的安全库存量向采购部门请购零部件。依据生产车间的生产领单给车间发料。</font></div>
<div class="sysBr500 text" align="left"><font size="2">5、财务：进行成本计算。</font></div>
<div class="sysBr500 text" align="left"><font size="2">经常有学生问我什么是ERP,简单地讲ERP就是企业资源计划系统.ERP是由美国著名的计算机技术咨询和评估集团Garter Group 公司提出的一整套企业管理系统体系标准，是指建立在信息技术基础上，以提高企业资源效能为系统思想，为企业提供业务集成运行中的资源管理方案。<br />
什么是ERP,ERP的科学定义是:ERP ─Enterprise Resource Planning 企业资源计划系统,是指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。<br />
ERP 不仅仅是一个软件,更重要的是一个管理思想,它实现了企业内部资源和企业相关的外<br />
部资源的整合。通过软件把企业的人、财、物、产、供、销及相应的物流、信息流、资金流、管理流、增值流等紧密地集成起来,实现资源优化和共享,这就是ERP。<br />
了解什么是erp后,我们再年看看中国企业ERP的历史在中国,企业信息化和ERP 应用已经风风雨雨渡过了二十多年,从1981 年沈阳第一机床厂从德国工程师协会引进了第一套MRP Ⅱ软件的时候,没有几个人知道什么是erp.两十几年来,ERP 在中国的应用与推广经历了从起步、索到逐渐成熟的风雨历程。早在1986 以前,绝大多数的中国企业都不知道什么是ERP ,大约在1985 年到1990 年的时候,许多管理专家、学者包括中国的企业家就开始研究国际上先进的管理模式是什么样的,应该如何来帮助中国企业提高管理竞争力,这期间诞生了一些ERP 应用的试点企业。到了90 年代,全球许多著名的ERP 厂商纷纷涌进中国市场,有更多<br />
的企业试用或购买了ERP 产品。但令我们失望的是,ERP 在中国企业的成功率并不是很高,这样的结果对中国企业打击很大,以致到现在还有很多的企业心有余悸,不敢上马ERP 应用。</font> </div>
<p class="sysBr500 text" align="left"><font size="2">伴随着WTO 的加入以及企业信息化的飞速进展，ERP 在中国也进入广泛普及阶段，越来越多的人知道了什么是erp.erp应用更加务实、业务范围更加广泛、涉及的业务深度逐渐加强的ERP 正为广大的中国企业所期盼。<br />
然而，目前国内的ERP 应用并不尽如人意，就整体而言，我国在应用ERP 上呈现出不平衡的发展趋势。各个企业差距较大，能够真正成功地全面实施ERP 管理系统的企业并不是很多。其原因在于：一、ERP业界对广大中国企业缺乏深入的理解，同时ERP成熟标准在我国缺乏深入实践，从而导致企业ERP 选型错乱，实施风险失控。二、一些软件厂商肆无忌惮地吹捧自己的产品，使得ERP 市场鱼目混珠，更直接导致了客户对ERP 产品的怀疑。<br />
一、落后的企业管理水平将严重制约ERP 的运用<br />
ERP 的发展是管理思想和计算机技术的结合体，从ERP 的产生历程来看，ERP 的成熟完全符合理论、实践、再理论到实践的过程。在20 多年的发展中，经过不断的实践管理理论的应用和创新，其系统内涵和基本模型已经十分清晰。而ERP的成熟不能只看这个软件本身的管理思想是多么的流行，更主要的是看ERP本身蕴涵的管理理论是不是在实际中已经得到了运用，在发达国家的成功运用证明了其思想是成功的。<br />
在我国，企业管理水平长期落后于信息化要求。很多企业存在基础数据不全，信息失真的问题。同时，大量企业尚未建立现代企业制度，企业内部对利用信息技术进行管理创新的动力不足，采用信息技术处于被动状态，普遍存在着信息管理机构不健全，信息管理制度不完善，执行力度不到位，现场管理不严格、不规范，信息设备利用率低等问题。这些问题的存在，将严重制约ERP 在我国的运用。<br />
二、企业纵向管理的不成熟将严重影响ERP 的运用<br />
ERP的运用为企业提高管理水平提供了更为广阔的空间。ERP应用具有范围扩展性，并逐渐形成针对行业的解决方案，来满足不同行业业务的特殊需求。而这一切成为现实的前提是，管理视角和管理高度的全面集成。尤其是，ERP 中财务系统应能实时收到来自所有业务过程、分析系统和交叉功能子系统的触发信息，并执行监控功能，敏捷做出快速决策。只有这样，才能使ERP 能更加综合的为企业运行进行支持和诊断。本文章什么是erp严禁抄袭.而我国企业目前在销售、采购、生产、财务等各环节严重脱节，是很常见的现象，尤其是成长较快的企业，脱节更为严重。如采购和生产之间的不协调经常造成停工待料；有时财务和销售环节的衔接不良，造成应收账款不能收清等现象。造成这种情况的原因在于，企业缺乏整体考虑，尤其体现在不能集成&#8220;三流&#8221;（资金流、物流、信息流），进而造成计划与控制不能统一，各部门业务不能协调等。这是ERP 在我国发展面临的第二个考验。<br />
三、ERP 软件生存周期的缺陷将严重制约ERP 的运用<br />
ERP 是综合应用了C/S 或者B/S 体系、关系数据库结构、面向对象技术、图形用户界面、第四代语言（4GL）、网络通讯等信息产业成果，以现代管理思想为灵魂的软件产品。ERP 成熟的产品应该具备实现数据完全按逻辑集成、提供业务流程模型、具有开发接口、可实现<br />
客户化配置等功能。技术和应用的完美结合应该是ERP成熟的一个表现，但是，我国ERP 软件目前存在的以下三个方面的问题将严重影响ERP 软件的生存周期，进而制约ERP 的运用。</font></p>
<img src ="http://www.blogjava.net/xixidabao/aggbug/147537.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2007-09-23 12:25 <a href="http://www.blogjava.net/xixidabao/articles/147537.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ERP知识</title><link>http://www.blogjava.net/xixidabao/articles/147330.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Sat, 22 Sep 2007 02:44:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/147330.html</guid><description><![CDATA[<a href="http://www.amteam.org/" target="_blank">www.amteam.org</a> <br />
<a href="http://www.e-works.com.cn/" target="_blank">www.e-works.com.cn</a> <br />
其他还有很多,但是国内我认为这两个就足够了,资料也很全,前者还相对较权威. <br />
其他的网站我认为都是抄袭.(ERP行业咨询实施12年经验) <br />
<br />
ERP（企业资源计划）是一种企业管理的思想，强调对企业的内部甚至外部的资源进行优化配置、提高利用效率。 <br />
一个由 Gartner Group 开发的概念，描述下一代制造商业系统和制造资源计划（MRP II）软件。它将包含客户/服务架构，使用图形用户接口，应用开放系统制作。除了已有的标准功能，它还包括其它特性，如品质、过程运作管理、以及调整报告等。特别是，ERP采用的基础技术将同时给用户软件和硬件两方面的独立性从而更加容易升级。ERP的关键在于所有用户能够裁剪其应用，因而具有天然的易用性。 <br />
Gartner Group提出ERP具备的功能标准应包括四个方面: <br />
1.超越MRPⅡ范围的集成功能 <br />
包括质量管理;试验室管理;流程作业管理;配方管理;产品数据管理;维护管理;管制报告和仓库管理。 <br />
2.支持混合方式的制造环境 <br />
包括既可支持离散又可支持流程的制造环境;按照面向对象的业务模型组合业务过程的能力和国际范围内的应用。 <br />
3.支持能动的监控能力,提高业务绩效 <br />
包括在整个企业内采用控制和工程方法;模拟功能;决策支持和用于生产及分析的图形能力。 <br />
4.支持开放的客户机/服务器计算环境 <br />
包括客户机/服务器体系结构;图形用户界面(GUI);计算机辅助设计工程(CASE),面向对象技术;使用SQL对关系数据库查询;内部集成的工程系统、商业系统、数据采集和外部集成 (EDI)。 <br />
ERP是对MRPⅡ的超越,从本质上看,ERP仍然是以MRPⅡ为核心,但在功能和技术上却超越了传统的MRPⅡ,它是以顾客驱动的、基于时间的、面向整个供应链管理的企业资源计划。 <br />
<br />
一、ERP系统的管理思想 <br />
<br />
ERP的核心管理思想就是实现对整个供应链的有效管理，主要体现在以下三个方面： <br />
1、体现对整个供应链资源进行管理的思想 <br />
在知识经济时代仅靠自己企业的资源不可能有效地参与市场竞争，还必须把经营过程中的有关各方如供应商、制造工厂、分销网络、客户等纳入一个紧密的供应链中，才能有效地安排企业的产、供、销活动，满足企业利用全社会一切市场资源快速高效地进行生产经营的需求，以期进一步提高效率和在市场上获得竞争优势。换句话说，现代企业竞争不是单一企业与单一企业间的竞争，而是一个企业供应链与另一个企业供应链之间的竞争。ERP系统实现了对整个企业供应链的管理，适应了企业在知识经济时代市场竞争的需要。 <br />
2、体现精益生产、同步工程和敏捷制造的思想 <br />
ERP系统支持对混合型生产方式的管理，其管理思想表现在两个方面：其一是&#8220;精益生产LP（Lean Production）&#8221;的思想，它是由美国麻省理工学院（MIT）提出的一种企业经营战略体系。即企业按大批量生产方式组织生产时，把客户、销售代理商、供应商、协作单位纳入生产体系，企业同其销售代理、客户和供应商的关系，已不再简单地是业务往来关系，而是利益共享的合作伙伴关系，这种合作伙伴关系组成了一个企业的供应链，这即是精益生产的核心思想。其二是&#8220;敏捷制造（Agile Manufacturing）&#8221;的思想。当市场发生变化，企业遇有特定的市场和产品需求时，企业的基本合作伙伴不一定能满足新产品开发生产的要求，这时，企业会组织一个由特定的供应商和销售渠道组成的短期或一次性供应链，形成&#8220;虚拟工厂&#8221;，把供应和协作单位看成是企业的一个组成部分，运用&#8220;同步工程（SE）&#8221;，组织生产，用最短的时间将新产品打入市场，时刻保持产品的高质量、多样化和灵活性，这即是&#8220;敏捷制造&#8221;的核心思想。 <br />
3、体现事先计划与事中控制的思想 <br />
ERP系统中的计划体系主要包括：主生产计划、物料需求计划、能力计划、采购计划、销售执行计划、利润计划、财务预算和人力资源计划等，而且这些计划功能与价值控制功能已完全集成到整个供应链系统中。 <br />
另一方面，ERP系统通过定义事务处理（Transaction）相关的会计核算科目与核算方式，以便在事务处理发生的同时自动生成会计核算分录，保证了资金流与物流的同步记录和数据的一致性。从而实现了根据财务资金现状，可以追溯资金的来龙去脉，并进一步追溯所发生的相关业务活动，改变了资金信息滞后于物料信息的状况，便于实现事中控制和实时做出决策。 <br />
此外，计划、事务处理、控制与决策功能都在整个供应链的业务处理流程中实现，要求在每个流程业务处理过程中最大限度地发挥每个人的工作潜能与责任心，流程与流程之间则强调人与人之间的合作精神，以便在有机组织中充分发挥每个的主观能动性与潜能。实现企业管理从&#8220;高耸式&#8221;组织结构向&#8220;扁平式&#8221;组织机构的转变，提高企业对市场动态变化的响应速度。 <br />
总之，借助IT技术的飞速发展与应用，ERP系统得以将很多先进的管理思想变成现实中可实施应用的计算机软件系统。 <br />
<br />
二、应用ERP与企业的关系 <br />
<br />
ERP是借用一种新的管理模式来改造原企业旧的管理模式，是先进的、行之有效的管理思想和方法。ERP软件在实际的推广应用中，其应用深度和广度都不到位，多数企业的效果不显著，没有引起企业决策者的震动和人们的广泛关注。 <br />
1．实施ERP是企业管理全方位的变革 <br />
企业领导层应该首先是受教育者，其次才是现代管理理论的贯彻者和实施者，规范企业管理及其有关环节，使之成为领导者、管理层及员工自觉的行动，使现代管理意识扎根于企业中，成为企业文化的一部分。国外企业实施ERP 似乎没有讨论的余地，全盘接受，自觉性强。其实，办企业这样做是天经地义的，而我们还要等待思想提高，观念更新，有时还要避开锋芒，迁就陈腐，互相推诿。如果我们不坚决向这些陋习告别，这场全方位的变革就会反复、甚至夭折。 <br />
2．企业管理班子要取得共识 <br />
要眼睛向内，练好内功，做好管理的基础工作，这是任何再好的应用软件和软件供应商都无法提供的，只能靠自己勤勤恳恳地耕耘。把ERP的实施称为"第一把手工程"，这说明了企业的决策者在ERP实施过程中的特殊作用。ERP是一个管理系统，牵动全局，没有第一把手的参与和授权，很难调动全局。 <br />
3．ERP的投入是一个系统工程 <br />
ERP的投入和产出与其他固定资产设备的投入和产出比较，并不那么直观、浅显和明了，投入不可能马上得到回报，见到效益。ERP的投入是一个系统工程，并不能立竿见影，它所贯彻的主要是管理思想，这是企业管理中的一条红线。它长期起作用、创效益，在不断深化中向管理要效益。 <br />
此外，实施ERP还要因地制宜，因企业而别，具体问题具体分析。首先，要根据企业的具体需求上相应的系统，而不是笼统地都上小型机，或者不顾企业的规模上 WindowsNT，这样长期运作，对企业危害性极大。其次，这种投入不是一劳永逸的，由于技术的发展很快，随着工作的深入，企业会越来越感到资源的紧缺，因此，每年应有相应的投入，才能保证系统健康地运转。 <br />
4．ERP的实施需要复合型人才 <br />
他们既要懂计算机技术，又要懂管理。当前高校对复合型人才的培养远远满足不了企业的需求。复合型人才的培养需要有一个过程和一定的时间，但企业领导者常把这样不多的人才当作一般管理者，没有把他们当作是企业来之不易的财富，是一支重要的队伍。这与长期忽视管理有关，这些复合型人才在企业中的地位远远不及市场开拓人员和产品开发者，而是"辅助"角色，不是政策倾斜对象，这种因素是造成人才流失的重要原因。另外，当企业上ERP时，这些复合型人才起到了先导作用，而一旦管理进入常规，他们似乎又成为多余的人，这已成为必然规律。在人才市场上，复合型人才最为活跃，那些有眼力的企业家都会下功夫挖掘人才，而这也不利于实施队伍的稳定。 <br />
总之，条件具备的企业要不失时机地上ERP管理系统，不能只搞纯理论研究、再研究，长时间地考察。要首先整理好内部管理基本数据，选定或开发适合自己企业的ERP软件，条件成熟了就上。 <br />
<br />
三、ERP的风险及其预防 <br />
<br />
企业的条件无论多优越，所做的准备无论多充分，实施的风险仍然存在。在ERP系统的实施周期中，各种影响因素随时都可能发生变化。如何有效地管理和控制风险是保证ERP系统实施成功的重要环节之一。 <br />
ERP项目的风险 <br />
通常人们在考虑失败的因素时，一般着重于对实施过程中众多因素的分析，而往往忽视项目启动前和实施完成后ERP系统潜在的风险。对于ERP项目而言，风险存在于项目的全过程，包括项目规划、项目预准备、实施过程和系统运行。归纳起来，ERP项目的风险主要有以下几方面： <br />
1. 缺乏规划或规划不合理； <br />
2. 项目预准备不充分，表现为硬件选型及ERP软件选择错误； <br />
3. 实施过程控制不严格，阶段成果未达标； <br />
4. 设计流程缺乏有效的控制环节； <br />
5. 实施效果未做评估或评估不合理； <br />
6. 系统安全设计不完善，存在系统被非法入侵的隐患； <br />
7. 灾难防范措施不当或不完整，容易造成系统崩溃。 <br />
<br />
1．战略规划 <br />
企业是否存在一个五年的IT系统规划？随着社会的信息化，IT系统对于企业不仅是工具，更是技术手段。ERP作为IT系统的重要组成部分，服务于企业的长期规划，是长期规划的手段和保证。ERP的目标源于IT系统规划，是评价ERP系统成败的基本标准，应依据IT系统规划，明确ERP 系统的实施范围和实施内容。 <br />
2．项目预准备 <br />
确定硬件及网络方案、选择ERP系统和评估咨询合作伙伴是该阶段的三项主要任务，也是ERP系统实施的三大要素。硬件及网络方案直接影响系统的性能、运行的可靠性和稳定性；ERP系统功能的强弱决定企业需求的满足程度；咨询合作伙伴的工作能力和经验决定实施过程的质量及实施成效。 <br />
3．项目实施控制 <br />
在ERP系统实施中，通常采用项目管理技术对实施过程进行控制和管理。有效的实施控制表现在科学的实施计划、明确的阶段成果和严格的成果审核。不仅如此，有效的控制还表现在积极的协调和通畅的信息传递渠道。实施ERP 的组织机构包括：指导委员会、项目经理、外部咨询顾问、IT部门、职能部门的实施小组和职能部门的最终用户。部门之间协调和交流得好坏决定实施过程的工作质量和工作效率。目前，在企业缺乏合适的项目经理的条件下，这一风险尤其明显和严重。 <br />
4．业务流程控制 <br />
企业业务流程重组是在项目实施的设计阶段完成的。流程中的控制和监督环节保证ERP在正式运行后，各项业务处于有效的控制之中，避免企业遭受人为损失。设计控制环节时，要兼顾控制和效率。过多的控制环节和业务流程冗余势必降低工作效率。而控制环节不足又会有业务失控的风险。 <br />
5．项目实施效果 <br />
虽然项目评估是ERP实施过程的最后一个环节。但这并不意味着项目评估不重要。相反，项目评估的结果是ERP实施效果的直接反映。正确地评价实施成果，离不开清晰的实施目标、客观的评价标准和科学的评价方法。目前普遍存在着忽视项目评估的问题。忽视项目评估将带来实施小组不关心实施成果这一隐患。这正是ERP项目的巨大风险所在。 <br />
6．系统安全管理 <br />
系统安全包括：操作系统授权、网络设备权限、应用系统功能权限、数据访问权限、病毒的预防、非法入侵的监督、数据更改的追踪、数据的安全备份与存档、主机房的安全管理规章、系统管理员的监督，等等。目前，企业中熟练掌握计算机技术的人员较少，计算机接入Internet的也不多。因此，在实施ERP系统时，普遍存在着不重视系统安全的现象。诸如：用户不注意口令保密、超级用户授权多人等。缺乏安全意识的直接后果是系统在安全设计上存在着漏洞和缺陷。近年来，不断有报章披露银行或企业计算机系统被非法入侵的消息，这给企业敲响了警钟。 <br />
7．意外事故或灾难 <br />
水灾、火灾、地震等不可抗拒的自然灾害会给ERP系统带来毁灭性的打击。企业正式启用ERP系统后，这种破坏将直接造成业务交易的中断，给企业带来不可估量的损失。未雨绸缪的策略和应对措施是降低这一风险的良方。如建立远程备份和恢复机制；在计算机系统不能正常工作的情况下，恢复手工处理业务的步骤和措施。 <br />
<br />
四、ERP应用成功的标志 <br />
<br />
ERP应用是否成功，原则地说，可以从以下几个方面加以衡量： <br />
1． 系统运行集成化： <br />
这是ERP应用成功在技术解决方案方面最基本的表现。ERP系统是对企业物流、资金流、信息流进行一体化管理的软件系统，其核心管理思想就是实现对&#8220;供应链（Supply Chain）&#8221;的管理。软件的应用将跨越多个部门甚至多个企业。为了达到预期设定的应用目标，最基本的要求是系统能够运行起来，实现集成化应用，建立企业决策完善的数据体系和信息共享机制。 <br />
一般来说，如果ERP系统仅在财务部门应用，只能实现财务管理规范化、改善应收帐款和资金管理；仅在销售部门应用，只能加强和改善营销管理；仅在库存管理部门应用，只能帮助掌握存货信息；仅在生产部门应用只能辅助制定生产计划和物资需求计划。只有集成一体化运行起来，才有可能达到： <br />
降低库存，提高资金利用率和控制经营风险； <br />
控制产品生产成本，缩短产品生产周期； <br />
提高产品质量和合格率； <br />
减少财务坏帐、呆帐金额等。 <br />
这些目标能否真正达到，还要取决于企业业务流程重组的实施效果。 <br />
2． 业务流程合理化： <br />
这是ERP应用成功在改善管理效率方面的体现。ERP应用成功的前提是必须对企业实施业务流程重组，因此，ERP应用成功也即意味着企业业务处理流程趋于合理化，并实现了ERP应用的以下几个最终目标： <br />
企业竞争力得到大幅度提升； <br />
企业面对市场的响应速度大大加快； <br />
客户满意度显著改善。 <br />
3． 绩效监控动态化： <br />
ERP的应用，将为企业提供丰富的管理信息。如何用好这些信息并在企业管理和决策过程中真正起到作用，是衡量ERP应用成功的另一个标志。在ERP系统完全投入实际运行后，企业应根据管理需要，利用ERP系统提供的信息资源设计出一套动态监控管理绩效变化的报表体系，以期即时反馈和纠正管理中存在的问题。这项工作，一般是在ERP系统实施完成后由企业设计完成。企业如未能利用ERP系统提供的信息资源建立起自己的绩效监控系统，将意味着ERP系统应用没有完全成功。 <br />
4． 管理改善持续化： <br />
随着ERP系统的应用和企业业务流程的合理化，企业管理水平将会明显提高。为了衡量企业管理水平的改善程度，可以依据管理咨询公司提供的企业管理评价指标体系对企业管理水平进行综合评价。评价过程本身并不是目的，为企业建立一个可以不断进行自我评价和不断改善管理的机制，才是真正目的。这也是ERP应用成功的一个经常不被人们重视的标志
<img src ="http://www.blogjava.net/xixidabao/aggbug/147330.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2007-09-22 10:44 <a href="http://www.blogjava.net/xixidabao/articles/147330.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图解MyEclipse炮制（EJB）SessionBean全过程 </title><link>http://www.blogjava.net/xixidabao/articles/85212.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Sun, 03 Dec 2006 11:45:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/85212.html</guid><description><![CDATA[
		<p>说起EJB开发工具中的豪杰，估计大家都会一致认为非JBuilder莫属，事实上我也这么认为。但是最近发现MyEclipse也不错。虽然没有像JB那样强大的“EJB Desiner视图”支持，但是借助XDoclet的多才多艺与灵活高效，也使得MyEclipse在JB面前毫不逊色。</p>
		<p>想必阅读这个文章的朋友都已经具备丰富的开发经验，有自己动手、发现、解决问题的能力，所以Eclipse和MyEclipse的安装配置等细节我就不提了，让我们从MyEclipse下的Weblogic配置开始吧。看图作文：</p>
		<p>（图1：Weblogic配置）</p>
		<p>
				<a href="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_01weblogic_config.GIF">
						<img alt="01weblogic_config" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_01weblogic_config.GIF" />
				</a>
		</p>
		<p>根据自己的实际情况配置上图的诸多参数，最后别忘了点击“Apply”和“OK”按钮，后面的类似操作也都别忘了。</p>
		<p>
				<br />（图2：新建一个EJB工程）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_02new_project.GIF" />
		</p>
		<p>
		</p>
		<p>
		</p>
		<p>选择一个“J2EE – EJB Project”再Next。</p>
		<p>
				<br />（图3：新建一个EJB工程续）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_03new_project2.GIF" />
		</p>
		<p>注意：因为目前的Xdoclet版本只支持J2EE 1.3，所以为了可以利用Xdoclet来自动生成EJB各接口的代码和配置描述文件，这里应该选择J2EE 1.3 规范级别。</p>
		<p>
				<br />（图4：新建一个EJB工程完毕）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_04new_project_created.GIF" />
		</p>
		<p>工程创建好了，可以看到初始的目录结构。</p>
		<p>
				<br />（图5：新建一个SessionBean Module）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_05new_sessionbean.GIF" />
		</p>
		<p>开始创建我们的第一个SessionBean吧。“J2EE – EJB – Session Bean”，就这么简单。</p>
		<p>
				<br />（图6：创建期参数）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_06new_sessionbean2.GIF" />
		</p>
		<p>这个图片上红框表示的都是需要特别注意的地方，讲解如下：<br />1. 为适应Xdoclet的惯用法，EJB 组件的Bean类所在的包名应该以“.ejb”结尾，Bean类名应该以“Bean”或“EJB”结尾，这里我用的是“Bean”。<br />2. 如果这个Bean类不经扩展而直接使用，那么就应该实现一个“ejbCreate”方法。如果扩展后再使用的话，那么可以放到子类里面再实现。</p>
		<p>
				<br />（图7：SessionBean创建完毕）</p>
		<p>
				<a>
						<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_07new_sessionbean_src1.GIF" />
				</a>
		</p>
		<p>初始的SessionBean代码创建好了，左边“Package Explorer”里可以看到当前的目录结构，右边的代码窗口里面可以看到Xdoclet自动生成的代码，里面有一些为进一步生成各种接口代码以及部署描述文档所用的Xdoclet标记，这里的标记很浅显，大家顾名思义一看就明白了，如果要改变部署后的JNDI名称以符合项目的具体规约要求，那么可以在图中红框标示的地方修改。</p>
		<p>
				<br />（图8：开始Xdoclet配置）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_08xdoclet1.GIF" />
		</p>
		<p>OK，现在开始最重要也最复杂的一步：Xdoclet配置。实际上Jbuilder的代码自动生成的幕后功臣也是Xdoclet，只不过Borland把它封装得严严实实，对于开发者来说就透明化了，这样做的好处是傻瓜化，降低了配置的难度，坏处很明显――损失了Xdoclet所著称的灵活性。<br />MyEclipse提供了许多标准的Xdoclet模板，我们直接拿来再根据实际情况自定义屈指可数的几个参数就可以使用了。</p>
		<p>
				<br />（图9：）</p>
		<p>
				<a href="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_09xdoclet2.GIF">
						<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_09xdoclet2.GIF" />
				</a>
		</p>
		<p>添加一个“Standard EJB”配置</p>
		<p>
				<br />（图10：Remove不需要的项目）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_10xdoclet3.GIF" />
		</p>
		<p>把我们当前工程中用不到的东西通通删掉，例如dao,dataobject,entitybmp,entitycmp,entitypk,valueobject,utilobject。得到图12所示的配置。</p>
		<p>
				<br />（图11：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_11xdoclet4.GIF" />
		</p>
		<p>
		</p>
		<p>（图12：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_12xdoclet5.GIF" />
		</p>
		<p>添加一个weblogic的部署描述选项，接着还要根据实际需要配置它。</p>
		<p>
				<br />（图13：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_13xdoclet6.GIF" />
		</p>
		<p>配置Createtables，设置为AlterOrCreate，以便以后加入其它EJB组件时共享一个部署描述文件。</p>
		<p>
				<br />（图14：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_14xdoclet7.GIF" />
		</p>
		<p>配置destDir，就是weblogic-ejb-jar.xml文件所在的目录。</p>
		<p>
				<br />（图15：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_15xdoclet7_2.GIF" />
		</p>
		<p>配置Version，根据实际的weblogic版本去两个版本号即可，我用的版本是811，这里设为8.1。</p>
		<p>
				<br />（图16：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_16xdoclet8.GIF" />
		</p>
		<p>选择使用动态Xdoclet配置文件还是静态Xdoclet配置文件，这里使用缺省的“动态”方式即可。</p>
		<p>
				<br />（图17：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_17xdoclet9.GIF" />
		</p>
		<p>OK，Xdoclet配置好之后就可以根据它的配置文件批量生成我们所期望的代码和文档了。</p>
		<p>
				<br />（图18：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_18xdoclet_SUCCESS.GIF" />
		</p>
		<p>Xdoclet执行过程。</p>
		<p>
				<br />（图19：）</p>
		<p>
				<a href="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_19xdoclet_files_built.GIF">
						<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_19xdoclet_files_built.GIF" />
				</a>
		</p>
		<p>Finished，看看红色选框里的文件，怎么样？果然不负众望吧？这里包括远程接口、本地接口、远程Home接口、本地Home接口、ejb-jar.xml、weblogic-ejb-jar.xml等文件。</p>
		<p>
				<br />（图20：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_20coding1.GIF" />
		</p>
		<p>这里是远程接口。看图中的高亮部分，顾名思义，用你自己的商务方法替换Xdoclet模板生成的示例商务方法。</p>
		<p>
				<br />（图21：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_21coding2.GIF" />
		</p>
		<p>这里是Bean类。同样是将示例方法替换成实际的商务方法。</p>
		<p>
				<br />（图22：）</p>
		<p>
				<a href="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_22coding_finished.GIF">
						<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_22coding_finished.GIF" />
				</a>
		</p>
		<p>代码都写好了，文件也都整理好了，嗯，该部署了。</p>
		<p>
				<br />（图23：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_23deploy1.GIF" />
		</p>
		<p>部署过程很简单。看图，在“Project”选项中选择我们的“Hello”工程，再点击“Add”按钮添加一个部署方案。</p>
		<p>
				<br />（图24：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_24deploy2.GIF" />
		</p>
		<p>部署到在文章初始就配置好的Weblogic8服务器，使用jar包方式。</p>
		<p>
				<br />（图25：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_25deploy_success.GIF" />
		</p>
		<p>配置完毕，该启动Weblogic看看效果了。 ：）btw，整理使用的是离线部署（或者叫做“冷部署”）方式，也就是说在部署过程中Weblogic没有启动，这时候如果EJB组件包含部署期可发现的错误那么在这一阶段将不能得到报告，当然我们也可以使用在线部署（“热部署”？）方式以即时得到部署期可能的异常，easy，自己尝试吧。</p>
		<p>
				<br />（图26：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_26test_client1.GIF" />
		</p>
		<p>部署好之后该干什么呢？看着屏幕发呆？呵呵。。还是先写个Client测试一下你的EJB组件是不是能够正常运行吧。如图，包名和类名除符合基本的JAVA规范之外都没有硬性的规定，只是习惯上将类名的后缀设为“TestClient”。</p>
		<p>
				<br />（图27：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_27test_client_imp_wllib.GIF" />
		</p>
		<p>因为要用到Weblogic的初始上下文工厂（WLInitialContextFactory），所以我们应该导入Weblogic的函数库，就是WL_HOME/server/lib/weblogic.jar了。当然这一步也未必就要放在这里做，反正在测试程序运行之前就可以。</p>
		<p>
				<br />（图28：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_28test_client_code.GIF" />
		</p>
		<p>该编写我们的测试客户端的实际代码了，看图，就那么二三十行经典代码，很简单吧？</p>
		<p>
				<br />（图29：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_29start_server.GIF" />
		</p>
		<p>叫上Weblogic，一起开动咯～</p>
		<p>
				<br />（图30：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_30start_server_ok.GIF" />
		</p>
		<p>Weblogic启动成功，启动过程中会自动载入我们刚才冷部署的EJB组件，这次没有报告任何异常，说明我们的EJB组件是正确无误的。</p>
		<p>
				<br />（图31：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_31execute_client_console.GIF" />
		</p>
		<p>执行我们的测试客户端，得到预期的输出。</p>
		<p>
				<br />（图32：）</p>
		<p>
				<img alt="" src="http://blog.csdn.net/images/blog_csdn_net/wingtrace/102616/r_32execute_server_console.GIF" />
		</p>
		<p>然后观察Weblogic的控制台，同样也是我们所期望的反馈，yeah，收工，吃饭去了。</p>
		<p>
				<br />有问题请大家回帖共同探讨。<br />希望还有机会下次跟大家讨论EntityBean的开发，<br />再下次是MessageDrivenBean，以及综合实例。：）</p>
		<p>参考文献：《MyEclipse Application Developer Guide》。</p>
		<br />
		<br />
		<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=310359</p>
<img src ="http://www.blogjava.net/xixidabao/aggbug/85212.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-12-03 19:45 <a href="http://www.blogjava.net/xixidabao/articles/85212.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse+Weblogic开发EJB</title><link>http://www.blogjava.net/xixidabao/articles/85211.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Sun, 03 Dec 2006 11:33:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/85211.html</guid><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: MyEclipse+Weblogic										开发										EJB																																																																				 																														编写人：邬文俊					...&nbsp;&nbsp;<a href='http://www.blogjava.net/xixidabao/articles/85211.html'>阅读全文</a><img src ="http://www.blogjava.net/xixidabao/aggbug/85211.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-12-03 19:33 <a href="http://www.blogjava.net/xixidabao/articles/85211.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在 Java 应用程序中访问USB设备</title><link>http://www.blogjava.net/xixidabao/articles/69017.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Mon, 11 Sep 2006 12:13:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/69017.html</guid><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="760" align="center" border="0">
				<tbody>
						<tr>
								<td class="title" valign="center" align="middle" height="56">
										<b>
												<font color="#ff0000" size="3">在 Java 应用程序中访问USB设备<br /><!-- #EndEditable --></font>
										</b>
								</td>
						</tr>
						<tr>
								<td class="formtitle" align="middle" height="40">
										<!-- #BeginEditable "2" -->作者: 羽斌 <br /><!-- #EndEditable --></td>
						</tr>
				</tbody>
		</table>
		<table height="65" cellspacing="0" cellpadding="0" width="760" align="center" border="0">
				<tbody>
						<tr>
								<td class="content" height="65">
										<!-- #BeginEditable "3" -->
										<table width="100%" align="center">
												<tbody>
														<tr>
																<td class="content">
																		<p>Java 平台一直都以其平台无关性自豪。虽然这种无关性有许多好处，但是它也使得编写与硬件交互的 Java 应用程序的过程变得相当复杂。在本文中，研究科学家蒋清野讨论了两个项目，它们通过提供使Java 应用程序可以使用 USB 设备的 API 而使这个过程变得更容易。虽然这两个项目仍然处于萌芽状态，但是它们都显示了良好的前景，并已经成为一些实用应用程序的基础。 </p>
																		<p>通用串行总线(Universal Serial Bus USB)规范的第一个版本发表于 1996年 1月。因为它的低成本、高数据传输率、使用容易和灵活性，USB 在计算机行业里获得了广泛接受。今天，许多周边设备和装置都是通过 USB 接口连接到计算机上的。目前，大多数一般用途的操作系统都提供了对 USB 设备的支持，并且用 C 或者 C++ 可以相对容易地开发访问这些外设的应用程序。不过，Java 编程语言在设计上对硬件访问提供的支持很少，所以编写与 USB 设备交互的应用程序是相当困难的。 </p>
																		<p>IBM 的 Dan Streetman 最早开始了在 Java 语言中提供对 USB 设备的访问的努力。2001年，他的项目通过 Java 规范请求(Java Specification Request，JSR)过程被接受为 Java 语言的候选扩展标准。这个项目现在称为 JSR-80 并且指定了官方包 javax.usb。同时，在 2000年 6月，Mojo Jojo 和 David Brownell 在 SourceForge 开始了 jUSB 项目。这两个项目都开发出了 Linux 开发人员可以使用的包，尽管它们都还很不完善。这两个项目也都开始试图向其他操作系统上的 Java 应用程序提供对 USB 设备的访问，尽管它们都还没有开发出可以使用的包(参阅 参考资料 中有关本文中讨论的这两个项目及其他项目的资料)。</p>
																		<p>在本文中，将对 jUSB 和 JSR-80 项目作一个简要介绍，不过，我们首先要看一下 USB 协议的具体细节，这样您就可以理解这两个项目是如何与 USB 设备交互的。我们还将提供代码片段以展示如何用这两个项目的 API 访问 USB 设备。 USB 介绍</p>
																		<p>1994年，一个由四个行业伙伴(Compaq、Intel、Microsoft 和 NEC)组成的联盟开始制定 USB 协议。该协议最初的目的是将 PC 与电话相连并提供容易扩展和重新配置的 I/O 接口。1996年 1月，发表了 USB 规范的第一个版本，1998年 9月发表了后续版本(版本 1.1)。这个规范允许 127台设备同时连接到一起，总的通信带宽限制为 12 Mbps。后来，又有三个成员(Hewlett-Packard、Lucent 和 Philips)加入了这个联盟。2000年 4月，发表了 USB 规范的 2.0版本，它支持高达 480 Mbps 的传输率。今天，USB 在高速(视频、图像、储存)和全速(音频、宽带、麦克风)数据传输应用中起了关键作用。它还使各种低速设备(键盘、鼠标、游戏外设、虚拟现实外设)连接到 PC 上。</p>
																		<p>USB 协议有严格的层次结构。在所有 USB 系统中，只有一个主设备，到主计算机的的 USB 接口称为主控器(host controller)。主控器有两个标准??开放主控器接口(Compaq 的 Open Host Controller Interface，OHCI)和通用主控器接口(Intel 的 Universal Host Controller Interface，UHCI)。这两个标准提供了同样的能力，并可用于所有的 USB 设备，UHCI 的硬件实现更简单一些，但是需要更复杂的设备驱动程序(因而 CPU 的负荷更大一些)。</p>
																		<p>USB 物理互连是分层的星形拓朴，最多有七层。一个 hub 是每个星形的中心，USB 主机被认为是 root hub。每一段连线都是 hub 与 USB 设备的点对点连接，后者可以是为系统提供更多附加点的另一个 hub，也可以是一个提供功能的某种设备。主机使用主/从协议与 USB 设备通信。这种方式解决了包冲突的问题，但是同时也阻止了附加的设备彼此建立直接通信。</p>
																		<p>所有传输的数据都是由主控器发起的。数据从主机流向设备称为下行(downstream)或者输出(out)传输，数据从设备流向主机称为上 行(upstream)或者输入(in)传输。数据传输发生在主机和 USB 设备上特定的端点(endpoint) 之间，主机与端点之间的数据链接称为管道(pipe)。 一个给定的 USB 设备可以有许多个端点，主机与设备之间数据管道的数量与该设备上端点的数量相同。一个管道可以是单向或者是双向的，一个管道中的数据流与所有其他管道中的数据流无关。</p>
																		<p>USB 网络中的通信可以使用下面四种数据传输类型中的任意一种：</p>
																		<p>控制传输： 这些是一些短的数据包，用于设备控制和配置，特别是在设备附加到主机上时。 </p>
																		<p>批量传输： 这些是数量相对大的数据包。像扫描仪或者 SCSI 适配器这样的设备使用这种传输类型。 </p>
																		<p>中断传输： 这些是定期轮询的数据包。主控器会以特定的间隔自动发出一个中断。 </p>
																		<p>等时传输： 这些是实时的数据流，它们对带宽的要求高于可靠性要求。音频和视频设备一般使用这种传输类型。 </p>
																		<p>像串行端口一样，计算机上每一个 USB 端口都由 USB 控制器指定了一个惟一的标识数字(端口 ID)。当 USB 设备附加到 USB 端口上时，就将这个 惟一端口 ID 分配给这台设备，并且 USB 控制器会读取设备描述符。设备描述符包括适用于该设备的全局信息、以及设备的配置信息。配置定义了一台 USB 设备的功能和 I/O 行为。一台 USB 设备可以有一个或者多个配置，这由它们相应的配置描述符所描述。每一个配置都有一个或者多个接口，它可以视为一个物理通信渠道 ；每一个接口有零个或者多个端点，它可以是数据提供者或者数据消费者，或者同时具有这两种身份。接口由接口描述符描述，端点由端点描述符描述。并且一台 USB 设备可能还有字符串描述符以提供像厂商名、设备名或者序列号这样的附加信息。</p>
																		<p>正如您所看到的，像 USB 这样的协议为使用 Java 这种强调平台和硬件无关性的语言的开发人员提出了挑战。现在让我们看两个试图解决这个问题的项目。</p>
																		<p>
																				<span class="f14">
																						<b>jUSB API</b>
																				</span>
																		</p>
																		<p>
																				<span class="f14">jUSB 项目是由 Mojo Jojo 和 David Brownell 于 2000年 6月创立的。其目标是提供一组免费的、在 Linux 平台上访问 USB 设备的 Java API。这个 API 是按照 Lesser GPL (LGPL)条款发表的，这意味着您可以在专有和免费软件项目中使用它。这个 API 提供了对多个物理 USB 设备的多线程访问，并支持本机和远程设备。具有多个接口的设备可以同时被多个应用程序(或者设备驱动程序)所访问，其中每一个应用程序(或者设备驱动程序)都占据一个不同的接口。该 API 支持控制传输、批量传输和中断传输，不支持等时传输，因为等时传输用于媒体数据(如音频和视频)，JMF API 已经在其他标准设备驱动程序上对此提供了很好的支持(参阅 参考资料)。当前，该 API 可以在具有 Linux 2.4 核心或者以前的 2.2.18 核心的 GNU/Linux 版本上工作。因此可支持大多数最新的版本，例如，该 API 可以在没有任何补丁或者升级的 Red Hat 7.2 和 9.0 上工作。</span>
																		</p>
																		<p>
																				<span class="f14">jUSB API 包括以下包：<br />　<br />·usb.core: 这个包是 jUSB API 的核心部分。它使得 Java 应用程序可以从 USB 主机访问 USB 设备。<br />·usb.linux: 这个包包含 usb.core.Host 对象的 Linux 实现、bootstrapping 支持和其他可以提升 Linux USB 支持的类。这个实现通过虚拟 USB 文件系统(usbdevfs)访问 USB 设备。<br />·usb.windows: 这个包包含 usb.core.Host 对象的 Windows 实现、bootstrapping 支持和其他可以提升 Windows USB 支持的类。这个实现仍然处于非常初级的阶段。<br />·usb.remote: 这个包是 usb.core API 的远程版本。它包括一个 RMI proxy 和一个 daemon 应用程序，它让 Java 应用程序可以访问远程计算机上的 USB 设备。<br />·usb.util: 这个包提供了一些有用的实用程序，可以将 firmware下载到 USB 设备上、将 USB 系统的内容转储到 XML 中、以及将只有 bulk I/O 的 USB 设备工具转换成一个套接字(socket)。<br />·usb.devices: 这个可选包收集了用 jUSB API 访问不同 USB 设备的 Java 代码，包括柯达数码相机和 Rio 500 MP3 播放器。这些 API 经过特别编写以简化访问特定 USB 设备的过程，并且不能用于访问其他设备。这些 API 是在 usb.core API 之上构建的，它们可以工作在所有支持 jUSB 的操作系统上。<br />·usb.view: 这个可选包提供了基于 Swing 的 USB 树简单浏览器。它是一个展示 jUSB API 应用的很好的示例程序。</span>
																		</p>
																		<p>
																				<span class="f14">尽管 usb.core.Host 对象的实现对于不同的操作系统是不同的，但是 Java 程序员只需要理解 usb.core 包就可以用 jUSB API 开始应用程序的开发。表 1 列出了 usb.core 的接口和类，Java 程序员应该熟悉它们：</span>
																		</p>
																		<p>
																				<span class="f14">表 1. jUSB 中的接口和类</span>
																		</p>
																		<span class="f14">
																				<table class="content" cellspacing="0" cellpadding="2" width="90%" align="center" border="1">
																						<tbody>
																								<tr>
																										<td>接口</td>
																										<td>说明</td>
																								</tr>
																								<tr>
																										<td>Bus</td>
																										<td>将一组 USB 设备连接到 Host 上</td>
																								</tr>
																								<tr>
																										<td>Host</td>
																										<td>表示具有一个或者多个 Bus 的 USB 控制器</td>
																								</tr>
																						</tbody>
																				</table>
																				<br />
																				<table class="content" cellspacing="0" cellpadding="2" width="90%" align="center" border="1">
																						<tbody>
																								<tr>
																										<td width="17%">类</td>
																										<td width="83%">说明</td>
																								</tr>
																								<tr>
																										<td width="17%">Configuration</td>
																										<td width="83%">提供对设备所支持的 USB 配置的访问，以及对与该配置关联的接口的访问</td>
																								</tr>
																								<tr>
																										<td width="17%">Descriptor</td>
																										<td width="83%">具有 USB 类型的描述符的实体的基类</td>
																								</tr>
																								<tr>
																										<td width="17%">Device</td>
																										<td width="83%">提供对 USB 设备的访问</td>
																								</tr>
																								<tr>
																										<td width="17%">DeviceDescriptor</td>
																										<td width="83%">提供对 USB 设备描述符的访问</td>
																								</tr>
																								<tr>
																										<td width="17%">EndPoint</td>
																										<td width="83%">提供对 USB 端点描述符的访问、在给定设备配置中构造设备数据输入或者输出</td>
																								</tr>
																								<tr>
																										<td width="17%">HostFactory</td>
																										<td width="83%">包含 bootstrapping 方法</td>
																								</tr>
																								<tr>
																										<td width="17%">Hub</td>
																										<td width="83%">提供对 USB hub 描述符以及一些 hub 操作的访问</td>
																								</tr>
																								<tr>
																										<td width="17%">Interface</td>
																										<td width="83%">描述一组端点，并与一个特定设备配置相关联</td>
																								</tr>
																								<tr>
																										<td width="17%">PortIdentifier</td>
																										<td width="83%">为 USB 设备提供稳定的字符串标识符，以便在操作和故障诊断时使用</td>
																								</tr>
																						</tbody>
																				</table>
																		</span>
																		<p>
																				<span class="f14">
																						<br />用 jUSB API 访问一台 USB 设备的正常过程如下：<br /></span>
																				<span class="f14">
																						<br />·通过从 HostFactory 得到 USB Host 进行 Bootstrap。<br />·从 Host 访问 USB Bus，然后从这个 Bus 访问 USB root hub(即 USB Device)。<br />·得到 hub 上可用的 USB 端口数量，遍历所有端口以找到正确的 Device。<br />·访问附加到特定端口上的 USB Device。可以用一台 Device 的 PortIdentifier 直接从 Host 访问它，也可以通过从 root hub 开始遍历 USB Bus 找到它。<br />·用 ControlMessage 与该 Device 直接交互，或者从该 Device 的当前 Configuration 中要求一个 Interface，并与该 Interface 上可用的 Endpoint 进行 I/O 。</span>
																		</p>
																		<p>
																				<span class="f14">清单 1 展示了如何用 jUSB API 获得 USB 系统中的内容。这个程序编写为只是查看 root hub 上可用的 USB 设备，但是很容易将它改为遍历整个 USB 树。这里的逻辑对应于上述步骤 1 到步骤 4。</span>
																		</p>
																		<p>
																				<span class="f14">清单 1. 用 jUSB API 获得 USB 系统的内容</span>
																		</p>
																		<span class="f14">
																				<table class="content" bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
																						<tbody>
																								<tr>
																										<td>import usb.core.*;<br /><br />public class ListUSB<br />{<br />　public static void main(String[] args)<br />　{<br />　　try<br />　　{<br />　　　// Bootstrap by getting the USB Host from the HostFactory.<br />　　　Host host = HostFactory.getHost();<br /><br />　　　// Obtain a list of the USB buses available on the Host.<br />　　　Bus[] bus = host.getBusses();<br />　　　int total_bus = bus.length;<br /><br />　　　// Traverse through all the USB buses.<br />　　　for (int i=0; i&lt;total_bus; i++)<br />　　　{<br />　　　　// Access the root hub on the USB bus and obtain the<br />　　　　// number of USB ports available on the root hub.<br />　　　　Device root = bus[i].getRootHub();<br />　　　　int total_port = root.getNumPorts();<br /><br />　　　　// Traverse through all the USB ports available on the<br />　　　　// root hub. It should be mentioned that the numbering<br />　　　　// starts from 1, not 0.<br />　　　　for (int j=1; j&lt;=total_port; j++)<br />　　　　{<br />　　　　　// Obtain the Device connected to the port.<br />　　　　　Device device = root.getChild(j);<br />　　　　　if (device != null)<br />　　　　　{<br />　　　　　　// USB device available, do something here.<br />　　　　　}<br />　　　　}<br />　　　}<br />　　} catch (Exception e)<br />　　{<br />　　　System.out.println(e.getMessage());<br />　　}<br />　}</td>
																								</tr>
																						</tbody>
																				</table>
																		</span>
																		<br />
																		<p>
																				<span class="f14">清单 2 展示了在应用程序成功地找到了 Device 的条件下，如何与 Interface 和 EndPoint 进行批量 I/O。 这个代码段也可以修改为执行控制或者中断 I/O。它对应于上述步骤 5。</span>
																		</p>
																		<p>
																				<span class="f14">清单 2. 用 jUSB API 执行批量 I/O</span>
																				<span class="f14">
																						<table class="content" bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
																								<tbody>
																										<tr>
																												<td>if (device != null)<br />{<br />　// Obtain the current Configuration of the device and the number of<br />　// Interfaces available under the current Configuration.<br />　Configuration config = device.getConfiguration();<br />　int total_interface = config.getNumInterfaces();<br /><br />　// Traverse through the Interfaces<br />　for (int k=0; k&lt;total_interface; k++)<br />　{<br />　　// Access the currently Interface and obtain the number of<br />　　// endpoints available on the Interface.<br />　　Interface itf = config.getInterface(k, 0);<br />　　int total_ep = itf.getNumEndpoints();<br /><br />　　// Traverse through all the endpoints.<br />　　for (int l=0; l&lt;total_ep; l++)<br />　　{<br />　　　// Access the endpoint, and obtain its I/O type.<br />　　　Endpoint ep = itf.getEndpoint(l);<br />　　　String io_type = ep.getType();<br />　　　boolean input = ep.isInput();<br /><br />　　　// If the endpoint is an input endpoint, obtain its<br />　　　// InputStream and read in data.<br />　　　if (input)<br />　　　{<br />　　　　InputStream in;<br />　　　　in = ep.getInputStream();<br />　　　　// Read in data here<br />　　　　in.close();<br />　　　}<br />　　　// If the Endpoint is and output Endpoint, obtain its<br />　　　// OutputStream and write out data.<br />　　　else<br />　　　{<br />　　　　OutputStream out;<br />　　　　out = ep.getOutputStream();<br />　　　　// Write out data here.<br />　　　　out.close();<br />　　　}<br />　　}<br />　}<br />}</td>
																										</tr>
																								</tbody>
																						</table>
																				</span>
																		</p>
																		<p>
																				<span class="f14">jUSB 项目在 2000年 6月到 2001年 2月期间非常活跃。该 API 的最新的版本 0.4.4发表于 2001年 2月 14日。从那以后只提出了很少的改进，原因可能是 IBM 小组成功地成为了 Java 语言的候选扩展标准。不过，基于 jUSB 已经开发出一些第三方应用程序，包括 JPhoto 项目(这是一个用 jUSB 连接到数码照相机的应用程序)和 jSyncManager 项目(这是一个用 jUSB 与使用 Palm 操作系统的 PDA 同步的应用程序)。</span>
																		</p>
																		<p>
																				<span class="f14">
																						<b>JSR-80 API (javax.usb)</b>
																				</span>
																		</p>
																		<p>
																				<span class="f14">正如前面提到的，JSR-80 项目是由 IBM 的 Dan Streetman 于 1999年创立的。2001年，这个项目通过 Java 规范请求(JSR)过程被接受为 Java 语言的候选扩展标准。这个项目现在称为 JSR-80 并且被正式分派了 Java 包 javax.usb。这个项目使用 Common Public License 的许可证形式，并通过 Java Community Process 进行开发。这个项目的目标是为 Java 平台开发一个 USB 接口，可以从任何 Java 应用程序中完全访问 USB 系统。JSR-80 API 支持 USB 规范所定义的全部四种传输类型。目前，该 API 的 Linux 实现可以在支持 2.4 核心的大多数最新 GNU/Linux 版本上工作，如 Red Hat 7.2 和 9.0。</span>
																		</p>
																		<p>
																				<span class="f14">JSR-80 项目包括三个包：javax-usb (javax.usb API)、javax-usb-ri (操作系统无关的基准实现的公共部分)以及 javax-usb-ri-linux (Linux 平台的基准实现，它将公共基准实现链接到 Linux USB 堆栈)。所有这三个部分都是构成 Linux 平台上 java.usb API 完整功能所必需的。在该项目的电子邮件列表中可以看到有人正在致力于将这个 API 移植到其他操作系统上(主要是 Microsoft Windows)，但是还没有可以工作的版本发表。</span>
																		</p>
																		<p>
																				<span class="f14">尽管 JSR-80 API 的操作系统无关的实现在不同的操作系统上是不同的，但是 Java 程序员只需要理解 javax.usb 包就可以开始开发应用程序了。表 2 列出了 javax.usb 中的接口和类， Java 程序员应该熟悉它们：</span>
																		</p>
																		<p>
																				<span class="f14">表 2. JSR-80 API 中的接口和类</span>
																				<span class="f14">
																						<table class="content" cellspacing="0" cellpadding="2" width="90%" align="center" border="1">
																								<tbody>
																										<tr>
																												<td width="25%">接口</td>
																												<td width="75%">说明</td>
																										</tr>
																										<tr>
																												<td width="25%">UsbConfiguration</td>
																												<td width="75%">表示 USB 设备的配置</td>
																										</tr>
																										<tr>
																												<td width="25%">UsbConfigurationDescriptor</td>
																												<td width="75%">USB 配置描述符的接口</td>
																										</tr>
																										<tr>
																												<td width="25%">UsbDevice</td>
																												<td width="75%">USB 设备的接口</td>
																										</tr>
																										<tr>
																												<td width="25%">UsbDeviceDescriptor</td>
																												<td width="75%">USB 设备描述符的接口</td>
																										</tr>
																										<tr>
																												<td width="25%">UsbEndpoint</td>
																												<td width="75%">USB 端点的接口</td>
																										</tr>
																										<tr>
																												<td width="25%">UsbEndpointDescriptor</td>
																												<td width="75%">USB 端点描述符的接口</td>
																										</tr>
																										<tr>
																												<td width="25%">UsbHub</td>
																												<td width="75%">USB hub 的接口</td>
																										</tr>
																										<tr>
																												<td width="25%">UsbInterface</td>
																												<td width="75%">USB 接口的接口</td>
																										</tr>
																										<tr>
																												<td width="25%">UsbInterfaceDescriptor</td>
																												<td width="75%">USB 接口描述符的接口</td>
																										</tr>
																										<tr>
																												<td width="25%">UsbPipe</td>
																												<td width="75%">USB 管道的接口</td>
																										</tr>
																										<tr>
																												<td width="25%">UsbPort</td>
																												<td width="75%">USB 端口的接口</td>
																										</tr>
																										<tr>
																												<td width="25%">UsbServices</td>
																												<td width="75%">javax.usb 实现的接口</td>
																										</tr>
																								</tbody>
																						</table>
																						<br />
																						<table class="content" cellspacing="0" cellpadding="2" width="90%" align="center" border="1">
																								<tbody>
																										<tr>
																												<td width="25%">类</td>
																												<td width="75%">说明</td>
																										</tr>
																										<tr>
																												<td width="25%">UsbHostManager</td>
																												<td width="75%">javax.usb 的入口点</td>
																										</tr>
																								</tbody>
																						</table>
																				</span>
																		</p>
																		<p>
																				<span class="f14">用 JSR-80 API 访问 USB 设备的正常过程如下：<br /><br />·通过从 UsbHostManager 得到相应的 UsbServices 进行 Bootstrap。<br />·通过 UsbServices 访问 root hub。在应用程序中 root hub 就是一个 UsbHub。<br />·获得连接到 root hub 的 UsbDevices 清单。遍历所有低级 hub 以找到正确的 UsbDevice。<br />·用控制消息(UsbControlIrp)与 UsbDevice 直接交互，或者从 UsbDevice 的相应 UsbConfiguration 中要求一个 UsbInterface 并与该 UsbInterface 上可用的 UsbEndpoint 进行 I/O。<br />·如果一个 UsbEndpoint 用于进行 I/O，那么打开与它关联的 UsbPipe。通过这个 UsbPipe 可以同步或者异步提交上行数据(从 USB 设备到主计算机)和下行数据(从主计算机到 USB 设备)。<br />·当应用程序不再需要访问该 UsbDevice 时，关闭这个 UsbPipe 并释放相应的 UsbInterface。<br /><br />在清单 3 中，我们用 JSR-80 API 获得 USB 系统的内容。这个程序递归地遍历 USB 系统上的所有 USB hub 并找出连接到主机计算机上的所有 USB 设备。这段代码对应于上述步骤 1 到步骤 3。</span>
																		</p>
																		<p>
																				<span class="f14">清单 3. 用 JSR-80 API 获得 USB 系统的内容</span>
																		</p>
																		<span class="f14">
																				<table class="content" bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
																						<tbody>
																								<tr>
																										<td>import javax.usb.*;<br />import java.util.List;<br /><br />public class TraverseUSB<br />{<br />　public static void main(String argv[])<br />　{<br />　　try<br />　　{<br />　　　// Access the system USB services, and access to the root<br />　　　// hub. Then traverse through the root hub.<br />　　　UsbServices services = UsbHostManager.getUsbServices();<br />　　　UsbHub rootHub = services.getRootUsbHub();<br />　　　traverse(rootHub);<br />　　} catch (Exception e) {}<br />　}<br /><br />　public static void traverse(UsbDevice device)<br />　{<br />　　if (device.isUsbHub())<br />　　{<br />　　　// This is a USB Hub, traverse through the hub.<br />　　　List attachedDevices = ((UsbHub) device).getAttachedUsbDevices();<br />　　　for (int i=0; i&lt;attachedDevices.size(); i++)<br />　　　{<br />　　　　traverse((UsbDevice) attachedDevices.get(i));<br />　　　}<br />　　}<br />　　else<br />　　{<br />　　　// This is a USB function, not a hub.<br />　　　// Do something.<br />　　}<br />　}<br />}</td>
																								</tr>
																						</tbody>
																				</table>
																		</span>
																		<p>
																				<span class="f14">清单 4 展示了在应用程序成功地找到 Device 后，如何与 Interface 和 EndPoint 进行 I/O。这段代码还可以修改为进行所有四种数据传输类型的 I/O。它对应于上述步骤 4 到步骤 6。</span>
																		</p>
																		<p>
																				<span class="f14">清单 4. 用 JSR-80 API 进行 I/O</span>
																		</p>
																		<span class="f14">
																				<table class="content" bordercolor="#ffcc66" width="90%" align="center" bgcolor="#dadacf" border="1">
																						<tbody>
																								<tr>
																										<td>public static void testIO(UsbDevice device)<br />{<br />　try<br />　{<br />　　// Access to the active configuration of the USB device, obtain<br />　　// all the interfaces available in that configuration.<br />　　UsbConfiguration config = device.getActiveUsbConfiguration();<br />　　List totalInterfaces = config.getUsbInterfaces();<br /><br />　　// Traverse through all the interfaces, and access the endpoints<br />　　// available to that interface for I/O.<br />　　for (int i=0; i&lt;totalInterfaces.size(); i++)<br />　　{<br />　　　UsbInterface interf = (UsbInterface) totalInterfaces.get(i);<br />　　　interf.claim();<br />　　　List totalEndpoints = interf.getUsbEndpoints();<br />　　　for (int j=0; j&lt;totalEndpoints.size(); j++)<br />　　　{<br />　　　　// Access the particular endpoint, determine the direction<br />　　　　// of its data flow, and type of data transfer, and open the<br />　　　　// data pipe for I/O.<br />　　　　UsbEndpoint ep = (UsbEndpoint) totalEndpoints.get(i);<br />　　　　int direction = ep.getDirection();<br />　　　　int type = ep.getType();<br />　　　　UsbPipe pipe = ep.getUsbPipe();<br />　　　　pipe.open();<br />　　　　// Perform I/O through the USB pipe here.<br />　　　　pipe.close();<br />　　　}<br />　　　interf.release();<br />　　}<br />　} catch (Exception e) {}<br />}</td>
																								</tr>
																						</tbody>
																				</table>
																		</span>
																		<p>
																				<span class="f14">JSR-80 项目从一开始就非常活跃。2003年 2月发表了 javax.usb API、RI 和 RI 的 0.10.0 版本。看起来这一版本会提交给 JSR-80 委员会做最终批准。预计正式成为 Java 语言的扩展标准后，其他操作系统上的实现会很快出现。Linux 开发者团体看来对 JSR-80 项目的兴趣比 jUSB 项目更大，使用 Linux 平台的 javax.usb API 的项目数量在不断地增加。</span>
																		</p>
																		<p>
																				<span class="f14">
																						<b>结束语</b>
																				</span>
																		</p>
																		<p>
																				<span class="f14">jUSB API 和 JSR-80 API 都为应用程序提供了从运行 Linux 操作系统的计算机中访问 USB 设备的能力。JSR-80 API 提供了比 jUSB API 更多的功能，很有可能成为 Java 语言的扩展标准。目前，只有 Linux 开发人员可以利用 jUSB 和 JSR-80 API 的功能。不过，有人正在积极地将这两种 API 移植到其他操作系统上。Java 开发人员应该在不久就可以在其他操作系统上访问 USB 设备。从现在起就熟悉这些 API，当这些项目可以在多个平台上发挥作用时，您就可以在自己的应用程序中加入 USB 功能了。</span>
																		</p>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/xixidabao/aggbug/69017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-09-11 20:13 <a href="http://www.blogjava.net/xixidabao/articles/69017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用Java实现几种常见的排序算法</title><link>http://www.blogjava.net/xixidabao/articles/69015.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Mon, 11 Sep 2006 11:40:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/69015.html</guid><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="760" align="center" border="0">
				<tbody>
						<tr>
								<td class="title" valign="center" align="middle" height="56">
										<b>
												<font color="#ff0000" size="3">用Java实现几种常见的排序算法<br /><!-- #EndEditable --></font>
										</b>
								</td>
						</tr>
						<tr>
								<td class="formtitle" align="middle" height="40">
										<!-- #BeginEditable "2" -->&lt;转载&gt; 作者：treeroot <br /><!-- #EndEditable --></td>
						</tr>
				</tbody>
		</table>
		<table height="65" cellspacing="0" cellpadding="0" width="760" align="center" border="0">
				<tbody>
						<tr>
								<td class="content" height="65">
										<!-- #BeginEditable "3" -->
										<table width="760" align="center">
												<tbody>
														<tr>
																<td class="content" align="left" width="724">
																		<p style="TEXT-ALIGN: left">用Java语言实现的各种排序，包括插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序、SortUtil等。</p>
																		<p style="TEXT-ALIGN: left" clear="both">
																				<strong>插入排序：</strong>
																		</p>
																		<p class="code" style="TEXT-ALIGN: left">package org.rut.util.algorithm.support;<br /><br />import org.rut.util.algorithm.SortUtil;<br />/**<br /> * @author treeroot<br /> * @since 2006-2-2<br /> * @version 1.0<br /> */<br />public class InsertSort implements SortUtil.Sort{<br /><br />    /* (non-Javadoc)<br />     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br />     */<br />    public void sort(int[] data) {<br />        int temp;<br />        for(int i=1;i&lt;data.length;i++){<br />            for(int j=i;(j&gt;0)&amp;&amp;(data[j]&lt;data[j-1]);j--){<br />                SortUtil.swap(data,j,j-1);<br />            }<br />        }        <br />    }<br /><br />}</p>
																		<p style="TEXT-ALIGN: left">
																				<strong>冒泡排序：</strong>
																		</p>
																		<p class="code" style="TEXT-ALIGN: left">package org.rut.util.algorithm.support;<br /><br />import org.rut.util.algorithm.SortUtil;<br /><br />/**<br /> * @author treeroot<br /> * @since 2006-2-2<br /> * @version 1.0<br /> */<br />public class BubbleSort implements SortUtil.Sort{<br /><br />    /* (non-Javadoc)<br />     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br />     */<br />    public void sort(int[] data) {<br />        int temp;<br />        for(int i=0;i&lt;data.length;i++){<br />            for(int j=data.length-1;j&gt;i;j--){<br />                if(data[j]&lt;data[j-1]){<br />                    SortUtil.swap(data,j,j-1);<br />                }<br />            }<br />        }<br />    }<br /><br />}</p>
																		<p style="TEXT-ALIGN: left">
																				<strong>选择排序：</strong>
																		</p>
																		<p class="code" style="TEXT-ALIGN: left">package org.rut.util.algorithm.support;<br /><br />import org.rut.util.algorithm.SortUtil;<br /><br />/**<br /> * @author treeroot<br /> * @since 2006-2-2<br /> * @version 1.0<br /> */<br />public class SelectionSort implements SortUtil.Sort {<br /><br />    /*<br />     * (non-Javadoc)<br />     * <br />     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br />     */<br />    public void sort(int[] data) {<br />        int temp;<br />        for (int i = 0; i &lt; data.length; i++) {<br />            int lowIndex = i;<br />            for (int j = data.length - 1; j &gt; i; j--) {<br />                if (data[j] &lt; data[lowIndex]) {<br />                    lowIndex = j;<br />                }<br />            }<br />            SortUtil.swap(data,i,lowIndex);<br />        }<br />    }<br /><br />}</p>
																		<p style="TEXT-ALIGN: left">
																				<strong>Shell排序：</strong>
																		</p>
																		<p class="code" style="TEXT-ALIGN: left">package org.rut.util.algorithm.support;<br /><br />import org.rut.util.algorithm.SortUtil;<br /><br />/**<br /> * @author treeroot<br /> * @since 2006-2-2<br /> * @version 1.0<br /> */<br />public class ShellSort implements SortUtil.Sort{<br /><br />    /* (non-Javadoc)<br />     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br />     */<br />    public void sort(int[] data) {<br />        for(int i=data.length/2;i&gt;2;i/=2){<br />            for(int j=0;j&lt;i;j++){<br />                insertSort(data,j,i);<br />            }<br />        }<br />        insertSort(data,0,1);<br />    }<br /><br />    /**<br />     * @param data<br />     * @param j<br />     * @param i<br />     */<br />    private void insertSort(int[] data, int start, int inc) {<br />        int temp;<br />        for(int i=start+inc;i&lt;data.length;i+=inc){<br />            for(int j=i;(j&gt;=inc)&amp;&amp;(data[j]&lt;data[j-inc]);j-=inc){<br />                SortUtil.swap(data,j,j-inc);<br />            }<br />        }<br />    }<br /><br />}</p>
																		<p style="TEXT-ALIGN: left">
																				<strong>快速排序：</strong>
																		</p>
																		<p class="code" style="TEXT-ALIGN: left">package org.rut.util.algorithm.support;<br /><br />import org.rut.util.algorithm.SortUtil;<br /><br />/**<br /> * @author treeroot<br /> * @since 2006-2-2<br /> * @version 1.0<br /> */<br />public class QuickSort implements SortUtil.Sort{<br /><br />    /* (non-Javadoc)<br />     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br />     */<br />    public void sort(int[] data) {<br />        quickSort(data,0,data.length-1);        <br />    }<br />    private void quickSort(int[] data,int i,int j){<br />        int pivotIndex=(i+j)/2;<br />        //swap<br />        SortUtil.swap(data,pivotIndex,j);<br />        <br />        int k=partition(data,i-1,j,data[j]);<br />        SortUtil.swap(data,k,j);<br />        if((k-i)&gt;1) quickSort(data,i,k-1);<br />        if((j-k)&gt;1) quickSort(data,k+1,j);<br />        <br />    }<br />    /**<br />     * @param data<br />     * @param i<br />     * @param j<br />     * @return<br />     */<br />    private int partition(int[] data, int l, int r,int pivot) {<br />        do{<br />           while(data[++l]&lt;pivot);<br />           while((r!=0)&amp;&amp;data[--r]&gt;pivot);<br />           SortUtil.swap(data,l,r);<br />        }<br />        while(l&lt;r);<br />        SortUtil.swap(data,l,r);        <br />        return l;<br />    }<br /><br />}</p>
																		<p style="TEXT-ALIGN: left">
																				<strong>改进后的快速排序：</strong>
																		</p>
																		<p class="code" style="TEXT-ALIGN: left">package org.rut.util.algorithm.support;<br /><br />import org.rut.util.algorithm.SortUtil;<br /><br />/**<br /> * @author treeroot<br /> * @since 2006-2-2<br /> * @version 1.0<br /> */<br />public class ImprovedQuickSort implements SortUtil.Sort {<br /><br />    private static int MAX_STACK_SIZE=4096;<br />    private static int THRESHOLD=10;<br />    /* (non-Javadoc)<br />     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br />     */<br />    public void sort(int[] data) {<br />        int[] stack=new int[MAX_STACK_SIZE];<br />        <br />        int top=-1;<br />        int pivot;<br />        int pivotIndex,l,r;<br />        <br />        stack[++top]=0;<br />        stack[++top]=data.length-1;<br />        <br />        while(top&gt;0){<br />            int j=stack[top--];<br />            int i=stack[top--];<br />            <br />            pivotIndex=(i+j)/2;<br />            pivot=data[pivotIndex];<br />            <br />            SortUtil.swap(data,pivotIndex,j);<br />            <br />            //partition<br />            l=i-1;<br />            r=j;<br />            do{<br />                while(data[++l]&lt;pivot);<br />                while((r!=0)&amp;&amp;(data[--r]&gt;pivot));<br />                SortUtil.swap(data,l,r);<br />            }<br />            while(l&lt;r);<br />            SortUtil.swap(data,l,r);<br />            SortUtil.swap(data,l,j);<br />            <br />            if((l-i)&gt;THRESHOLD){<br />                stack[++top]=i;<br />                stack[++top]=l-1;<br />            }<br />            if((j-l)&gt;THRESHOLD){<br />                stack[++top]=l+1;<br />                stack[++top]=j;<br />            }<br />            <br />        }<br />        //new InsertSort().sort(data);<br />        insertSort(data);<br />    }<br />    /**<br />     * @param data<br />     */<br />    private void insertSort(int[] data) {<br />        int temp;<br />        for(int i=1;i&lt;data.length;i++){<br />            for(int j=i;(j&gt;0)&amp;&amp;(data[j]&lt;data[j-1]);j--){<br />                SortUtil.swap(data,j,j-1);<br />            }<br />        }       <br />    }<br /><br />}</p>
																		<p style="TEXT-ALIGN: left">
																				<strong>归并排序：</strong>
																		</p>
																		<p class="code" style="TEXT-ALIGN: left">package org.rut.util.algorithm.support;<br /><br />import org.rut.util.algorithm.SortUtil;<br /><br />/**<br /> * @author treeroot<br /> * @since 2006-2-2<br /> * @version 1.0<br /> */<br />public class MergeSort implements SortUtil.Sort{<br /><br />    /* (non-Javadoc)<br />     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br />     */<br />    public void sort(int[] data) {<br />        int[] temp=new int[data.length];<br />        mergeSort(data,temp,0,data.length-1);<br />    }<br />    <br />    private void mergeSort(int[] data,int[] temp,int l,int r){<br />        int mid=(l+r)/2;<br />        if(l==r) return ;<br />        mergeSort(data,temp,l,mid);<br />        mergeSort(data,temp,mid+1,r);<br />        for(int i=l;i&lt;=r;i++){<br />            temp[i]=data[i];<br />        }<br />        int i1=l;<br />        int i2=mid+1;<br />        for(int cur=l;cur&lt;=r;cur++){<br />            if(i1==mid+1)<br />                data[cur]=temp[i2++];<br />            else if(i2&gt;r)<br />                data[cur]=temp[i1++];<br />            else if(temp[i1]&lt;temp[i2])<br />                data[cur]=temp[i1++];<br />            else<br />                data[cur]=temp[i2++];            <br />        }<br />    }<br /><br />}</p>
																		<p style="TEXT-ALIGN: left">
																				<strong>改进后的归并排序:</strong>
																		</p>
																		<p class="code" style="TEXT-ALIGN: left">package org.rut.util.algorithm.support;<br /><br />import org.rut.util.algorithm.SortUtil;<br /><br />/**<br /> * @author treeroot<br /> * @since 2006-2-2<br /> * @version 1.0<br /> */<br />public class ImprovedMergeSort implements SortUtil.Sort {<br /><br />    private static final int THRESHOLD = 10;<br /><br />    /*<br />     * (non-Javadoc)<br />     * <br />     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br />     */<br />    public void sort(int[] data) {<br />        int[] temp=new int[data.length];<br />        mergeSort(data,temp,0,data.length-1);<br />    }<br /><br />    private void mergeSort(int[] data, int[] temp, int l, int r) {<br />        int i, j, k;<br />        int mid = (l + r) / 2;<br />        if (l == r)<br />            return;<br />        if ((mid - l) &gt;= THRESHOLD)<br />            mergeSort(data, temp, l, mid);<br />        else<br />            insertSort(data, l, mid - l + 1);<br />        if ((r - mid) &gt; THRESHOLD)<br />            mergeSort(data, temp, mid + 1, r);<br />        else<br />            insertSort(data, mid + 1, r - mid);<br /><br />        for (i = l; i &lt;= mid; i++) {<br />            temp[i] = data[i];<br />        }<br />        for (j = 1; j &lt;= r - mid; j++) {<br />            temp[r - j + 1] = data[j + mid];<br />        }<br />        int a = temp[l];<br />        int b = temp[r];<br />        for (i = l, j = r, k = l; k &lt;= r; k++) {<br />            if (a &lt; b) {<br />                data[k] = temp[i++];<br />                a = temp[i];<br />            } else {<br />                data[k] = temp[j--];<br />                b = temp[j];<br />            }<br />        }<br />    }<br /><br />    /**<br />     * @param data<br />     * @param l<br />     * @param i<br />     */<br />    private void insertSort(int[] data, int start, int len) {<br />        for(int i=start+1;i&lt;start+len;i++){<br />            for(int j=i;(j&gt;start) &amp;&amp; data[j]&lt;data[j-1];j--){<br />                SortUtil.swap(data,j,j-1);<br />            }<br />        }<br />    }</p>
																		<p style="TEXT-ALIGN: left">}</p>
																		<p style="TEXT-ALIGN: left">
																				<strong>堆排序：</strong>
																		</p>
																		<p class="code" style="TEXT-ALIGN: left">package org.rut.util.algorithm.support;<br /><br />import org.rut.util.algorithm.SortUtil;<br /><br />/**<br /> * @author treeroot<br /> * @since 2006-2-2<br /> * @version 1.0<br /> */<br />public class HeapSort implements SortUtil.Sort{<br /><br />    /* (non-Javadoc)<br />     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])<br />     */<br />    public void sort(int[] data) {<br />        MaxHeap h=new MaxHeap();<br />        h.init(data);<br />        for(int i=0;i&lt;data.length;i++)<br />            h.remove();<br />        System.arraycopy(h.queue,1,data,0,data.length);<br />    }<br /><br />     private static class MaxHeap{         <br />        <br />        void init(int[] data){<br />            this.queue=new int[data.length+1];<br />            for(int i=0;i&lt;data.length;i++){<br />                queue[++size]=data[i];<br />                fixUp(size);<br />            }<br />        }<br />         <br />        private int size=0;<br /><br />        private int[] queue;<br />                <br />        public int get() {<br />            return queue[1];<br />        }<br /><br />        public void remove() {<br />            SortUtil.swap(queue,1,size--);<br />            fixDown(1);<br />        }<br />        //fixdown<br />        private void fixDown(int k) {<br />            int j;<br />            while ((j = k &lt;&lt; 1) &lt;= size) {<br />                if (j &lt; size &amp;&amp; queue[j]&lt;queue[j+1])<br />                    j++; <br />                if (queue[k]&gt;queue[j]) //不用交换<br />                    break;<br />                SortUtil.swap(queue,j,k);<br />                k = j;<br />            }<br />        }<br />        private void fixUp(int k) {<br />            while (k &gt; 1) {<br />                int j = k &gt;&gt; 1;<br />                if (queue[j]&gt;queue[k])<br />                    break;<br />                SortUtil.swap(queue,j,k);<br />                k = j;<br />            }<br />        }<br /><br />    }<br /><br />}</p>
																		<p style="TEXT-ALIGN: left">
																				<strong>SortUtil：</strong>
																		</p>
																		<p class="code" style="TEXT-ALIGN: left">package org.rut.util.algorithm;<br /><br />import org.rut.util.algorithm.support.BubbleSort;<br />import org.rut.util.algorithm.support.HeapSort;<br />import org.rut.util.algorithm.support.ImprovedMergeSort;<br />import org.rut.util.algorithm.support.ImprovedQuickSort;<br />import org.rut.util.algorithm.support.InsertSort;<br />import org.rut.util.algorithm.support.MergeSort;<br />import org.rut.util.algorithm.support.QuickSort;<br />import org.rut.util.algorithm.support.SelectionSort;<br />import org.rut.util.algorithm.support.ShellSort;<br /><br />/**<br /> * @author treeroot<br /> * @since 2006-2-2<br /> * @version 1.0<br /> */<br />public class SortUtil {<br />    public final static int INSERT = 1;<br />    public final static int BUBBLE = 2;<br />    public final static int SELECTION = 3;<br />    public final static int SHELL = 4;<br />    public final static int QUICK = 5;<br />    public final static int IMPROVED_QUICK = 6;<br />    public final static int MERGE = 7;<br />    public final static int IMPROVED_MERGE = 8;<br />    public final static int HEAP = 9;<br /><br />    public static void sort(int[] data) {<br />        sort(data, IMPROVED_QUICK);<br />    }<br />    private static String[] name={<br />            "insert", "bubble", "selection", "shell", "quick", "improved_quick", "merge", "improved_merge", "heap"<br />    };<br />    <br />    private static Sort[] impl=new Sort[]{<br />            new InsertSort(),<br />            new BubbleSort(),<br />            new SelectionSort(),<br />            new ShellSort(),<br />            new QuickSort(),<br />            new ImprovedQuickSort(),<br />            new MergeSort(),<br />            new ImprovedMergeSort(),<br />            new HeapSort()<br />    };<br /><br />    public static String toString(int algorithm){<br />        return name[algorithm-1];<br />    }<br />    <br />    public static void sort(int[] data, int algorithm) {<br />        impl[algorithm-1].sort(data);<br />    }<br /><br />    public static interface Sort {<br />        public void sort(int[] data);<br />    }<br /><br />    public static void swap(int[] data, int i, int j) {<br />        int temp = data[i];<br />        data[i] = data[j];<br />        data[j] = temp;<br />    }<br />}</p>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/xixidabao/aggbug/69015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-09-11 19:40 <a href="http://www.blogjava.net/xixidabao/articles/69015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>应用开发中的技巧2则</title><link>http://www.blogjava.net/xixidabao/articles/68402.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Thu, 07 Sep 2006 16:56:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/68402.html</guid><description><![CDATA[
		<table width="100%">
				<tbody>
						<tr>
								<td valign="bottom">
										<table cellspacing="2" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td valign="top" width="1%">
																		<p align="left"> </p>
																		<p align="left"> </p>
																</td>
																<td valign="top" width="77%">
																		<div>
																				<div class="navbar" align="center">
																				</div>
																		</div>
																		<div>
																				<table dir="ltr" width="100%" summary="Chapter Number" border="0" abbr="ChapNum">
																						<colgroup width="100%">
																								<col id="1" />
																						</colgroup>
																						<tbody>
																								<tr>
																										<td class="ChapNumber" align="right">
																												<div align="left">
																														<p class="title" align="center">应用开发中的技巧2则</p>
																														<p align="center">作者：洪建</p>
																														<p class="normal">2000年毕业以来，从事SUN Solaris平台的J2EE保险行业的应用开发已经有三年多的时间了。在这些年的开发实践中，积累了一些自己认为对工作有帮助的技巧和方法，希望给其他的同行也有所帮助。</p>
																														<p>
																																<b>一、对JAVA源文件、类、帮助文档的管理</b>
																														</p>
																														<p class="normal">在一个实际的应用开发中，都需要编写大量的JavaBeans等等一些JAVA类。尤其在一个项目中会有大量的共用类供其他开发人员使用，那么很好地管理这些类，方便其他开发人员的查找相关帮助和项目中各成员的相互学习，有必要采用一种简单、行之有效的方法达到该目的。</p>
																														<p class="normal">
																																<b>1、JAVA源文件的组织</b>
																														</p>
																														<p class="normal">现有两个package：</p>
																														<pre>package com.j2ee.crm.util;
package com.j2ee.crm.basicinfo;
</pre>
																														<p class="normal">那么我们可以在work工作目录分别建立以下文件夹： 
</p>
																														<p class="normal">
																																<img src="http://gceclub.sun.com.cn/staticcontent/html/2004-03-05/image002.jpg" border="0" />
																														</p>
																														<p class="normal">将相应的JAVA源文件分别置于basicinfo和util文件夹下即可。那么我们可以把所有的JAVA源文件放在com文件下相应的子文件夹下。 
</p>
																														<p class="normal">
																																<b>2、JAVA源文件的编译</b>
																														</p>
																														<p class="normal">先书写一个文本文件filelist.txt保存在work目录下，其内容为：</p>
																														<pre>./com/j2ee/crm/basicinfo/UserInfo.java
./com/j2ee/crm/basicinfo/UserInfoList.java
./com/j2ee/crm/basicinfo/UserInfoDAO.java
./com/j2ee/crm/util/Utility.java
./com/j2ee/crm/util/DbException.java
./com/j2ee/crm/util/DbConnection.java
</pre>
																														<p class="normal">然后在work目录下建立一个classes文件夹，用来存储class文件。</p>
																														<p class="normal">在命令行方式下进入到work目录，用以下命令编译即可：</p>
																														<pre>work&gt;javac -d ./classes @filelist.txt
</pre>
																														<p class="normal">如果编译通过的话，将形成以下的文件夹和类文件：</p>
																														<p class="normal">
																																<img src="http://gceclub.sun.com.cn/staticcontent/html/2004-03-05/image004.jpg" border="0" />
																														</p>
																														<p class="normal">那么我们可以把所有的CLASS类文件都放在classes文件夹下相应的子文件夹下。</p>
																														<p class="normal">
																																<b>3、生成帮助文档</b>
																														</p>
																														<p class="normal">先书写一个文本文件package.txt保存在work目录下，其内容为：</p>
																														<pre>com.j2ee.crm.basicinfo
com.j2ee.crm.util
</pre>
																														<p class="normal">然后在work目录下建立一个docs文件夹，用来存储javadoc帮助文件。</p>
																														<p class="normal">在命令行方式下进入到work目录，用以下命令编译即可：</p>
																														<pre>work&gt; javadoc -d ./docs @package.txt
</pre>
																														<p class="normal">他将形成以下的文件夹和html类型的帮助文档：</p>
																														<p class="normal">
																																<img src="http://gceclub.sun.com.cn/staticcontent/html/2004-03-05/image006.jpg" border="0" />
																														</p>
																														<p class="normal">那么我们可以把所有的html帮助文件都放在docs文件夹下相应的子文件夹下。</p>
																														<p class="normal">
																																<b>4、使用java2html工具</b>
																														</p>
																														<p class="normal">利用java2html工具可以方便地生成类似于javadoc类型的java源码浏览html页面。可以先到http://www.java2html.com网站下载一个Java2HTML.zip文件，解压后将j2h.jar文件的路径添加到classpath环境变量中。</p>
																														<p class="normal">然后在work目录下建立一个codeSource文件。</p>
																														<p class="normal">在命令行方式下进入到work目录，用以下命令即可：</p>
																														<pre>work&gt; java j2h -js ./ -n 名称 -nh -nf -d ./codeSource
</pre>
																														<p class="normal">他将形成以下的文件夹和html类型的JAVA源代码html查看页面：</p>
																														<p class="normal">
																																<img src="http://gceclub.sun.com.cn/staticcontent/html/2004-03-05/image008.jpg" border="0" />
																														</p>
																														<p class="normal">
																																<b>5、总结</b>
																														</p>
																														<p class="normal">通过这些简单的方法和步骤，我们可以分门别类地把java源文件、class类文件、javadoc帮助文档和java源代码html浏览页面组织在work工作目录下不同的子文件夹下，结构清晰、有利于工作的展开和开发人员之间的交流。</p>
																												</div>
																										</td>
																								</tr>
																						</tbody>
																				</table>
																		</div>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/xixidabao/aggbug/68402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-09-08 00:56 <a href="http://www.blogjava.net/xixidabao/articles/68402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Win32下Swt-Designer4.1.1与MyEclipse4.0的破解方法及注册机</title><link>http://www.blogjava.net/xixidabao/articles/67387.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Sun, 03 Sep 2006 04:02:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/67387.html</guid><description><![CDATA[
		<div class="postTitle">
				<a class="postTitle2" id="viewpost1_TitleUrl" href="/gufen/archive/2005/09/27/14184.html">
						<font color="#4371a6">Win32下Swt-Designer4.1.1与MyEclipse4.0的破解方法及注册机</font>
				</a>
		</div>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">Win32</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下</span>
				<span lang="EN-US">Swt-Designer<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /?><st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">4.1.1</st1:chsdate></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">破解</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">环境：</span>
				<span lang="EN-US">win32</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US">Eclipse3.1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US">Designer_v<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">4.1.1</st1:chsdate></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1．<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">首先去</span>
				<span lang="EN-US">
						<a href="http://www.swt-designer.com/">
								<font color="#4371a6">http://www.swt-designer.com/</font>
						</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">左边的</span>
				<span lang="EN-US">download</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">菜单点击进去后下载</span>
				<span lang="EN-US">Edition for Eclipse 3.1 &amp; 3.2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，下载后的文件名为</span>
				<span lang="EN-US">Designer_v<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">4.1.1</st1:chsdate>_for_Eclipse3.1.zip<img height="283" alt="Snap2.gif" src="http://www.blogjava.net/images/blogjava_net/gufen/001.swt.myeclipse.crack/Snap2.gif" width="606" border="0" /><br /></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt">
				<span lang="EN-US">
						<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?>
						<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">
								<v:stroke joinstyle="miter">
								</v:stroke>
								<v:formulas>
										<v:f eqn="if lineDrawn pixelLineWidth 0">
										</v:f>
										<v:f eqn="sum @0 1 0">
										</v:f>
										<v:f eqn="sum 0 0 @1">
										</v:f>
										<v:f eqn="prod @2 1 2">
										</v:f>
										<v:f eqn="prod @3 21600 pixelWidth">
										</v:f>
										<v:f eqn="prod @3 21600 pixelHeight">
										</v:f>
										<v:f eqn="sum @0 0 1">
										</v:f>
										<v:f eqn="prod @6 1 2">
										</v:f>
										<v:f eqn="prod @7 21600 pixelWidth">
										</v:f>
										<v:f eqn="sum @8 21600 0">
										</v:f>
										<v:f eqn="prod @7 21600 pixelHeight">
										</v:f>
										<v:f eqn="sum @10 21600 0">
										</v:f>
								</v:formulas>
								<v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f">
								</v:path>
								<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
								<o:lock aspectratio="t" v:ext="edit">
								</o:lock>
						</v:shapetype>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2．<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后在我的网络硬盘中下载破解文件</span>
				<span lang="EN-US">: <a href="http://www.thefilehut.com/userfiles/gufen/forblog/swt.designer.pro.keygen.for.eclipse.3.1.rar"><font color="#4371a6">http://www.thefilehut.com/userfiles/gufen/forblog/swt.designer.pro.keygen.for.eclipse.3.1.rar</font></a></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">3．<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">解压后在</span>
				<span lang="EN-US">cmd</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">命令中敲入</span>
				<span lang="EN-US">swt.ui.bat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，运行后出现以下界面，输入框中的内容，然后点击</span>
				<span lang="EN-US">Generate</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">产生序列号和激活码。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<img height="241" alt="Snap3.gif" src="http://www.blogjava.net/images/blogjava_net/gufen/001.swt.myeclipse.crack/Snap3.gif" width="377" border="0" />
						<br />如果你所使用的环境和版本不是</span>
				<span lang="EN-US">win32</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US">Eclipse3.1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，</span>
				<span lang="EN-US">Designer_v<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">4.1.1</st1:chsdate></span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，请参照</span>
				<span lang="EN-US">
						<a href="http://blog.chinaz.com/u1/530/archives/2005/1789.shtml">
								<font color="#4371a6">http://blog.chinaz.com/u1/530/archives/2005/1789.shtml</font>
						</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来进行破解。这种情况下需要：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 45pt; TEXT-INDENT: -9pt; mso-list: l2 level2 lfo2; tab-stops: list 45.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">a)<span style="FONT: 7pt 'Times New Roman'"></span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将该目录下的</span>
				<span lang="EN-US">org.eclipse.swt.win32.win32.x86_<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">3.1.0</st1:chsdate>.jar</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">swt-win32-3138.dll</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">删除</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 45pt; TEXT-INDENT: -9pt; mso-list: l2 level2 lfo2; tab-stops: list 45.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">b)</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">Eclipse</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">目录下找到</span>
				<span lang="EN-US">swt.jar</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（名字视版本而定，</span>
				<span lang="EN-US">eclipse3.1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下是</span>
				<span lang="EN-US">org.eclipse.swt.win32.win32.x86_<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">3.1.0</st1:chsdate>.jar</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US">swt-win32-2135.dll</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（名字视版本而定，</span>
				<span lang="EN-US">eclipse3.1</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下是</span>
				<span lang="EN-US">swt-win32-3138.dll</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）</span>
				<span lang="EN-US">2</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个文件，拷贝到</span>
				<span lang="EN-US">swt.ui.bat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所在的目录。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 45pt; TEXT-INDENT: -9pt; mso-list: l2 level2 lfo2; tab-stops: list 45.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">c)</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修改</span>
				<span lang="EN-US">swt.ui.bat,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如这样：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: 21pt; mso-para-margin-left: 3.43gd">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原来是</span>
				<span lang="EN-US">: start javaw -cp SWTDesigner_<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">2.0.0</st1:chsdate>_Keygen.jar;<span style="COLOR: red">org.eclipse.swt.win32.win32.x86_3.1.0.jar</span> swtdesigner.keygen.SWTUI</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: 21pt; mso-para-margin-left: 3.43gd">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">修改为</span>
				<span lang="EN-US">:start javaw -cp SWTDesigner_<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">2.0.0</st1:chsdate>_Keygen.jar;<span style="COLOR: red">swt.jar</span> swtdesigner.keygen.SWTUI</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: 21pt; mso-para-margin-left: 3.43gd">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">红色为修改的地方，然后运行后将</span>
				<span lang="EN-US">Version</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">填入你下载的</span>
				<span lang="EN-US">swt-designer</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">版本号即可产生注册码。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt">
				<span lang="EN-US">
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo3; tab-stops: list 21.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">4.<span style="FONT: 7pt 'Times New Roman'">         </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将下载的</span>
				<span lang="EN-US">Designer_v<st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">4.1.1</st1:chsdate>_for_Eclipse3.1.zip</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">插件安装到</span>
				<span lang="EN-US">eclipse,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果你不知道如何安装插件请在</span>
				<span lang="EN-US">google</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里搜索这方面的文章，应该很多的。我也是这样走过来的。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">运行</span>
				<span lang="EN-US">eclipse,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">打开</span>
				<span lang="EN-US">window-&gt;preferences…-&gt;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选择左边树形中的</span>
				<span lang="EN-US">designer(</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果没有这一项说明</span>
				<span lang="EN-US">swt-designer</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">插件没有安装成功</span>
				<span lang="EN-US">)</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span>
				<span lang="EN-US">-&gt;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">点击右下的“</span>
				<span lang="EN-US">Registration and Activation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”</span>
				<span lang="EN-US">-&gt;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">弹出“</span>
				<span lang="EN-US">Product Registration and Activation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”框，用默认直接点击</span>
				<span lang="EN-US">Next-&gt;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这一步需要注意的是</span>
				<span lang="EN-US">Name</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">框中两个字符串之间要有个空格，他会认为一个是姓一个是名，否则</span>
				<span lang="EN-US">Next</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">按钮一直是灰的，其他随便填，</span>
				<span lang="EN-US">email</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">框中要合乎</span>
				<span lang="EN-US">email</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">格式就可以了</span>
				<span lang="EN-US">-&gt;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">输入破解产生的序列号和激活码</span>
				<span lang="EN-US">-&gt;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">显示“</span>
				<span lang="EN-US">Activation is complete. Thank you.</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">”表示破解成功</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">现在就可以免费使用</span>
				<span lang="EN-US">swt-designer</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">了</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">Win32</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下</span>
				<span lang="EN-US">MyEclipse4.0</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">破解</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个破解起来很简单，先去</span>
				<span lang="EN-US">http://www.myeclipseide.com</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下载</span>
				<span lang="EN-US">Myeclipse4.0,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后去</span>
				<span lang="EN-US">
						<a href="http://www.thefilehut.com/userfiles/gufen/forblog/MyEclipse-4.0.0-GA.Keygen.zip">
								<font color="#4371a6">http://www.thefilehut.com/userfiles/gufen/forblog/MyEclipse-4.0.0-GA.Keygen.zip</font>
						</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">下载破解。安装</span>
				<span lang="EN-US">Myeclipse,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之后解压破解文件后运行</span>
				<span lang="EN-US">keygen.bat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，产生一个</span>
				<span lang="EN-US">key</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，之后在</span>
				<span lang="EN-US">Myeclipse</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注册一下就可以了。<span lang="EN-US">Myeclipse我忘记什么地方注册了，好像装好<span lang="EN-US">Myeclipse后在preferences中的<span lang="EN-US">Myeclipse里点几下就会弹出来个框，把key copy过去确认就可以了。<br /><br />以上破解方法仅供个人学习，请支持正版。(形式？)</span></span></span></span>
		</p>
<img src ="http://www.blogjava.net/xixidabao/aggbug/67387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-09-03 12:02 <a href="http://www.blogjava.net/xixidabao/articles/67387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDK1.5新特性介绍</title><link>http://www.blogjava.net/xixidabao/articles/47236.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Sat, 20 May 2006 16:15:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/47236.html</guid><description><![CDATA[下面我们简单介绍一下这些新特性。<BR><BR>　　<STRONG>1.泛型(<a href="http://www.yesky.com/key/481/20481.html" class="bluekey" target="_blank">Generic</a>)</STRONG><BR><BR>　　C++通过模板技术可以指定集合的元素类型，而Java在1.5之前一直没有相对应的功能。一个集合可以放任何类型的对象，相应地从集合里面拿对象的时候我们也不得不对他们进行强制得<a href="http://www.yesky.com/key/2166/12166.html" class="bluekey" target="_blank">类型转换</a>。猛虎引入了泛型，它允许指定集合里元素的类型，这样你可以得到强类型在编译时刻进行类型检查的好处。<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#e6e4dd border=1>
<TBODY>
<TR>
<TD>Collection&lt;String&gt;　c　=　new　ArrayList();<BR>c.add(new　Date());</TD></TR></TBODY></TABLE><BR>　　编译器会给出一个错误：<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#e6e4dd border=1>
<TBODY>
<TR>
<TD>add(java.lang.String)　in　java.util.Collection&lt;java.lang.String&gt;　cannot　be　applied　to　(java.util.Date)</TD></TR></TBODY></TABLE><BR>　　<STRONG>2.For-Each循环</STRONG><BR><BR>　　For-Each循环得加入简化了集合的遍历。假设我们要遍历一个集合对其中的元素进行一些处理。典型的代码为：<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#e6e4dd border=1>
<TBODY>
<TR>
<TD>void　processAll(Collection　c){<BR>　　　　for(Iterator　i=c.iterator();　i.hasNext();){<BR>　　　　　　　　MyClass　myObject　=　(MyClass)i.next();<BR>　　　　　　　　myObject.process();<BR>　　　　}<BR>}</TD></TR></TBODY></TABLE><BR>　　使用For-Each循环，我们可以把代码改写成：<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#e6e4dd border=1>
<TBODY>
<TR>
<TD>void　processAll(Collection&lt;MyClass&gt;　c){<BR>　　　　for　(MyClass　　myObject　:c)<BR>　　　　　　　　myObject.process();<BR>}</TD></TR></TBODY></TABLE><BR>　　这段代码要比上面清晰许多，并且避免了<a href="http://www.yesky.com/key/1853/26853.html" class="bluekey" target="_blank">强制类型转换</a>。<BR><BR>

<BR><BR>　　自动装包/拆包大大方便了基本类型数据和它们包装类地使用。<BR><BR>　　自动装包：基本类型自动转为包装类.(int　&gt;&gt;　Integer)<BR><BR>　　自动拆包：包装类自动转为基本类型.(Integer　&gt;&gt;　int)<BR><BR>　　在JDK1.5之前，我们总是对集合不能存放基本类型而耿耿于怀，现在自动转换机制解决了我们的问题。<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#e6e4dd border=1>
<TBODY>
<TR>
<TD>int　a　=　3;<BR>Collection　c　=　new　ArrayList();<BR>c.add(a);//自动转换成Integer.<BR><BR>Integer　b　=　new　Integer(2);<BR>c.add(b　+　2);</TD></TR></TBODY></TABLE><BR>　　这里Integer先自动转换为int进行加法运算，然后int再次转换为Integer.<BR><BR>　　<STRONG>4.枚举(Enums)</STRONG><BR><BR>　　JDK1.5加入了一个全新类型的“类”－枚举类型。为此JDK1.5引入了一个新关键字enmu.　我们可以这样来定义一个枚举类型。<BR>　<BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#e6e4dd border=1>
<TBODY>
<TR>
<TD>public　enum　Color<BR>{<BR>　　　Red,<BR>　　　White,<BR>　　　Blue<BR>}</TD></TR></TBODY></TABLE><BR>　　然后可以这样来使用Color　myColor　=　Color.Red.<BR><BR>　　枚举类型还提供了两个有用的静态方法values()和valueOf().　我们可以很方便地使用它们，例如<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#e6e4dd border=1>
<TBODY>
<TR>
<TD>for　(Color　c　:　Color.values())<BR>　　　　　　　　　　　　System.out.println(c);</TD></TR></TBODY></TABLE><BR>　　<STRONG>5.可变参数(Varargs)</STRONG><BR><BR>　　可变参数使程序员可以声明一个接受可变数目参数的方法。注意，可变参数必须是函数声明中的最后一个参数。假设我们要写一个简单的方法打印一些对象，<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#e6e4dd border=1>
<TBODY>
<TR>
<TD>util.write(obj1);<BR>util.write(obj1,obj2);<BR>util.write(obj1,obj2,obj3);<BR>…</TD></TR></TBODY></TABLE><BR>　　在JDK1.5之前，我们可以用重载来实现，但是这样就需要写很多的重载函数，显得不是很有效。如果使用可变参数的话我们只需要一个函数就行了<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#e6e4dd border=1>
<TBODY>
<TR>
<TD>public　void　write(Object...　objs)　{<BR>　　　for　(Object　obj:　objs)<BR>　　　　　　System.out.println(obj);<BR>}</TD></TR></TBODY></TABLE><BR>　　在引入可变参数以后，Java的反射包也更加方便使用了。对于c.getMethod("test",　new　Object[0]).invoke(c.newInstance(),　new　Object[0]))，现在我们可以这样写了c.getMethod("test").invoke(c.newInstance())，这样的代码比原来清楚了很多。　<BR><BR>　　<STRONG>6.静态导入(Static　Imports)</STRONG><BR><BR>　　要使用用静态成员（方法和变量）我们必须给出提供这个方法的类。使用静态导入可以使被导入类的所有静态变量和静态方法在当前类直接可见，使用这些静态成员无需再给出他们的类名。<BR><BR>
<TABLE borderColor=#ffcc66 width="90%" align=center bgColor=#e6e4dd border=1>
<TBODY>
<TR>
<TD>import　static　java.lang.Math.*;<BR>…….<BR>r　=　sin(PI　*　2);　//无需再写r　=　Math.sin(Math.PI);</TD></TR></TBODY></TABLE><BR>　　不过，过度使用这个特性也会一定程度上降低代码地可读性。<BR><BR>　　JDK1.5　正式版即将发布，让我们共同期待吧。我们可以去http://java.sun.com/j2se/1.5.0/download.jsp，先下载一个beta爽一把。<BR><img src ="http://www.blogjava.net/xixidabao/aggbug/47236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-05-21 00:15 <a href="http://www.blogjava.net/xixidabao/articles/47236.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从Java应用程序动态生成PDF文件</title><link>http://www.blogjava.net/xixidabao/articles/47233.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Sat, 20 May 2006 15:06:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/47233.html</guid><description><![CDATA[如果应用程序需要动态生成 PDF 文档，则需要 iText 库。开放源码的 iText 库使 PDF 文档的创建能够在瞬间完成。本文介绍了 iText 并提供了使用它从 Java ? 技术应用程序生成 PDF 文档的由浅入深的指南。我们创建了一个示例应用程序以更好地理解 iText。<BR><BR>　　很多应用程序要求动态生成 PDF 文档。这类应用程序包括银行生成用于电子邮件投递的客户报表，到读者购买特定图书章节并以 PDF 格式接收这些文档。例子罗列下去是很多的。在本文中，将使用 iText Java 库生成 PDF 文档，并引导您完成一个示例应用程序，以使您能够更好地理解和使用 iText。 <BR><BR>　　<B>熟悉 iText</B><BR><BR>　　iText 是 Lowagie.com 站点（请参阅 参考资料）免费提供的 Java 库。iText 库的功能很强大，支持 HTML、RTF 和 XML 文档的生成，此外还能够生成 PDF 文档。可以从多种字体中选择文档中所使用的字体。同时，iText 的结构允许使用相同的代码生成以上任意类型的文档。<BR><BR>　　iText 库中的类用于以各种字体来生成 PDF 文本、在 PDF 文档中生成表格、为页添加水印等。iText 还提供许多功能。在一篇文章中不可能一一演示。本文中将介绍生成 PDF 文档的基本需求。<BR><BR>　　我们将使用 Eclipse 来进行示例应用程序开发。作为一个开放源码的 IDE，可以免费获得 Eclipse，而且其功能非常强大。现在就可以下载 Eclipse。<BR><BR>　<B>　iText API：近距离观察</B><BR><BR>　　com.lowagie.text.Document 是生成 PDF 的主要的类。它是需要使用的第一个类。一旦开始创建文档，将需要一个写入器向文档中写入内容。com.lowagie.text.pdf.PdfWriter 就是一个 PDF 写入器。下面列出了通常需要使用的类：<BR><BR>　　com.lowagie.text.Paragraph —— 这个类表示一个缩进的段落。 <BR><BR>　　com.lowagie.text.Chapter —— 这个类表示 PDF 文档中的章节。使用 Paragraph 作为题目并使用 int 作为章节号码来创建它。<BR><BR>　　com.lowagie.text.Font —— 这个类包含了全部的字体规范，例如字体、大小、样式和颜色。各种字体都在这个类中声明为静态常数。 <BR><BR>　　com.lowagie.text.List —— 这个类表示一个列表，按顺序包含许多 ListItems。<BR><BR>　　com.lowagie.text.Table —— 这个类表示包含单元格的表，单元格有序地排列在矩阵中。<BR><BR>　　<B>下载 iText 并在 Eclipse 中进行配置</B><BR><BR>　　作为一个纯粹的 Java 库，iText 是以 JAR 文件的形式出现的（请参阅 参考资料）。一旦下载了这个库（在路径 C:\temp 下），执行下列步骤将会在 Eclipse 环境中配置 iText 库：<BR><BR>　　在 Eclipse 中创建一个新的 Java 项目，将其命名为 iText。<BR><BR>　　在 Package Explorer 视图中右击 iText 项目，然后选择 Properties。<BR><BR>　　单击 Java Build Path。在 Libraries 选项卡中，单击 Add External JARs。<BR><BR>　　浏览到 C:\temp 目录，选择该目录下的 itext-1.3.jar。<BR><BR>　　单击 OK。<BR><BR>　　现在已经配置好 iText，Eclipse 已经准备好创建 Java 应用程序以生成动态 PDF 文档。<BR><BR>　　<B>示例应用程序</B><BR><BR>　　还有什么能够比自己动手创建一个工作示例更好地演示技术了？现在有了所需的工具（Eclipse IDE）和库（iText 库），可以开始设计和开发一个示例应用程序了。<BR><BR>　　让我们创建一个简单的 PDF 文档，其中包含一些基本元素，如纯文本、非默认字体的彩色文本、表格、列表、章节和小节等。此应用程序的目的是让您熟悉 iText 库的使用方式。有很多与帮助生成 PDF 文档有关的类。在这里不可能介绍所有这些类。iText 的 javadoc 是介绍如何使用这些类的很好的资料。下面让我们来开始编写代码。<BR><BR>　　第一步是创建一个文档。文档是 PDF 文档的所有元素的容器。 <BR><BR>　　清单 1. 实例化文档对象<BR><BR>Document document = new Document(PageSize.A4, 50, 50, 50, 50);<BR><BR>　　第一个参数是页面大小。接下来的参数分别是左、右、上和下页边距。但是还没有定义该文档的类型。它取决于所创建的写入器的类型。对于我们的示例，选择了 com.lowagie.text.pdf.PdfWriter。其他写入器为 HtmlWriter、RtfWriter、XmlWriter 等等。它们的名称解释了它们的实际用途。<BR><BR>　　清单 2. 创建 PdfWriter 对象<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>PdfWriter writer = PdfWriter.getInstance(document, \<BR>new FileOutputStream("C:\\ITextTest.pdf"));<BR>document.open(); </TD></TR></TBODY></TABLE><BR>　　第一个参数是对文档对象的引用，第二个参数是文件的实际名称，在该名称中还会给出其输出路径。接下来，打开文档以写入内容。<BR><BR><br>

　现在，将在文档的第一页上添加一些文本。通过 com.lowagie.text.Paragraph 来添加文本。可以用文本及其默认的字体、颜色、大小等等设置来创建一个默认段落。或者，也可以设置自己的字体。下面让我们来看看这两种做法。<BR><BR>　　清单 3. 创建段落对象<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>document.add(new Paragraph("First page of the document."));<BR>document.add(new Paragraph("Some more text on the \<BR>first page with different color and font type.", <BR>FontFactory.getFont(FontFactory.COURIER, 14, Font.BOLD, new Color(255, 150, 200))));</TD></TR></TBODY></TABLE><BR>　　下面是上面代码的输出示例。在上面代码的结尾处添加 document.close(); 以关闭文档。 <BR><BR>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG height=195 alt=上面代码的输出示例 src="/imagelist/06/04/8hc192wxbtr7.gif" width=572><BR>图 1. 上面代码的输出示例</DIV></TD></TR></TBODY></TABLE><BR>　　您已经看到了如何向 PDF 文档中添加纯文本。接下来，需要向文档中添加一些复杂的元素。我们开始创建一个新的章节。章节是一个特殊的小节，默认情况下，章节从一个新的页面开始，并显示一个默认的编号。<BR><BR>　　清单 4. 创建章节对象<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>Paragraph title1 = new Paragraph("Chapter 1", <BR>FontFactory.getFont(FontFactory.HELVETICA, \<BR>18, Font.BOLDITALIC, new Color(0, 0, 255)));<BR>Chapter chapter1 = new Chapter(title1, 1);<BR>chapter1.setNumberDepth(0);</TD></TR></TBODY></TABLE><BR>　　在上面的代码中，创建了一个新的章节对象，chapter1，其标题为 “This is Chapter 1”，将编号级别设为 0 就不会在页面上显示章节编号。<BR><BR>　　小节是章节的子元素。在下面的代码中，创建了一个标题为 “This is Section 1 in Chapter 1” 的小节。为在该小节下添加一些文本，创建了另一个段落对象，someSectionText，并将其添加到小节对象中。<BR><BR>　　清单 5. 创建小节对象<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>Paragraph title11 = new Paragraph("This is Section 1 in Chapter 1", <BR>FontFactory.getFont(FontFactory.HELVETICA, 16, \<BR>Font.BOLD, new Color(255, 0, 0)));<BR>Section section1 = chapter1.addSection(title11);<BR>Paragraph someSectionText = new Paragraph("This \<BR>text comes as part of section 1 of chapter 1.");<BR>section1.add(someSectionText);<BR>someSectionText = new Paragraph("Following is a 3 X 2 table.");<BR>section1.add(someSectionText);</TD></TR></TBODY></TABLE><BR>　　在添加表格之前，我们先看一下文档的样子。添加下面两行代码以关闭文档，然后编译并执行程序以生成 PDF 文档：document.add(chapter1);document.close();。<BR><BR>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG height=260 alt=章节输出示例 src="/imagelist/06/04/3s4o8z3j69pk.gif" width=565><BR>图 2. 章节输出示例</DIV></TD></TR></TBODY></TABLE><BR>　　接下来，创建一个表格对象。创建一个包含行列矩阵的表格。行中的单元格可以跨多个列。同样地，列中的单元格也可以跨多个行。因此，一个 3 x 2 的表格实际上不一定有 6 个单元格。<BR><BR>　　清单 6. 创建表格对象<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>Table t = new Table(3,2);<BR>t.setBorderColor(new Color(220, 255, 100));<BR>t.setPadding(5);<BR>t.setSpacing(5);<BR>t.setBorderWidth(1);<BR>Cell c1 = new Cell("header1");<BR>c1.setHeader(true);<BR>t.addCell(c1);<BR>c1 = new Cell("Header2");<BR>t.addCell(c1);<BR>c1 = new Cell("Header3");<BR>t.addCell(c1);<BR>t.endHeaders();<BR>t.addCell("1.1");<BR>t.addCell("1.2");<BR>t.addCell("1.3");<BR>section1.add(t);</TD></TR></TBODY></TABLE><BR>　　在上面的代码中，创建了一个表格对象，t，它有三列、两行。然后设置表格的边框颜色。填充用于设置单元格中文本间的间隔以及单元格的边界。间隔指的是相邻单元格间的边界。接下来，将创建三个单元格对象，每个单元格中的文本都各不相同。接下来，将它们添加到表格中。将它们添加到第一行中，从第一列开始，移到同一行中的下一列。一旦该行创建完成，就将下一个单元格添加到下一行的第一列中。也可以通过只提供单元格的文本将单元格添加到表格中，例如，t.addCell("1.1");。最后，将表格对象添加到小节对象中。<BR><BR>　　最后，我们来看一下如何将列表添加到 PDF 文档中。列表包含一定数量的 ListItem。可以对列表进行编号，也可以不编号。将第一个参数设置为 true 表明想创建一个要进行编号的列表。<BR><BR>　　清单 7. 创建列表对象<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>List l = new List(true, false, 10);<BR>l.add(new ListItem("First item of list"));<BR>l.add(new ListItem("Second item of list"));<BR>section1.add(l);</TD></TR></TBODY></TABLE><BR>　　我们已经向 chapter1 对象中添加了所需的对象。因此，已经没有其他要添加到 chapter1 中的元素了，现在可以将 chapter1 添加到主 document 中了。与在示例应用程序中所做的一样，还要在这时关闭文档对象。 <BR><BR>　　清单 8. 向主文档中添加章节<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>document.add(chapter1);<BR>document.close();</TD></TR></TBODY></TABLE><BR>　　<B>运行示例应用程序</B><BR><BR>　　下载示例应用程序，j-itextsample.jar（参见 下载）。<BR><BR>　　在某个目录中解压缩 j-itextsample.jar。例如，如果将其解压缩到 C:\temp，则会将源码和类文件放到 C:\temp\com\itext\test 目录下。<BR><BR>　　打开一个命令提示，将目录更改为 C:\temp。<BR><BR>　　在这个命令提示中设置系统的类路径。将 C:\temp\itext-1.3.jar 包括在系统的类路径中。在 Windows? 上，执行命令 set classpath=C:\temp\itext-1.3.jar;%classpath%。<BR><BR>　　使用命令 java com.itext.test.ITextTest 运行应用程序。<BR><BR>　　程序会在 C:\ 目录下生成一个 ITextTest.pdf 文档。下面显示了这个 PDF 文档第二页的屏幕图。<BR><BR>
<TABLE width="90%" align=center border=0>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG height=327 alt="PDF 文档的屏幕图" src="/imagelist/06/04/cz2u1mlz4354.gif" width=572><BR>图 3. PDF 文档的屏幕图</DIV></TD></TR></TBODY></TABLE><BR>　　<B>结束语</B><BR><BR>　　您已经看到了一些生成 PDF 的基本元素。iText 的美妙之处是相同元素的语法可以供不同类型的写入器使用。而且，写入器的输出可以重定向到控制台（当写入器类型是 XML 和 HTML 时）、servlet 的输出流（在对 PDF 文档的 Web 请求作出响应时）或者是其他类型的 OutputStream。当响应相同，但其类型随所请求的是 PDF、RTF、HTML 或 XML 文档而有所不同时，使用 iText 是非常方便的。iText 允许用户创建水印，对文档进行加密以及设置其他输出细节.<br><br><br><img src ="http://www.blogjava.net/xixidabao/aggbug/47233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-05-20 23:06 <a href="http://www.blogjava.net/xixidabao/articles/47233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在jsp中发送email</title><link>http://www.blogjava.net/xixidabao/articles/47228.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Sat, 20 May 2006 14:21:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/47228.html</guid><description><![CDATA[Blueski编译（包含了2篇文章，前篇用了sun.net.smtp，后一篇用了javamail. 


一、我们可以通过任何支持sun规范中的sun.net.smtp包的JSP引擎(如JSWDK)发送mail。 
(警告:使用内置的internal Sun规范包，这将影响到你的jsp程序的可移植性。) 

以下scriptlet利用SmtpClient类在jsp文件中发送email。 

<%@ page import="sun.net.smtp.SmtpClient, java.io.*" %> 
<% 
String from="gseshadri@hotmail.com"; 
String to="govind@jguru.com, govi@bigfoot.com"; 
try{ 
SmtpClient client = new SmtpClient("mail.xxxxx.xxx"); 
client.from(from); 
client.to(to); 
PrintStream message = client.startMessage(); 
message.println("To: " + to); 
message.println("Subject: Sending email from JSP!"); 
message.println("This was sent from a JSP page!"); 
message.println(); 
message.println("Cool beans! :-)"); 
message.println(); 
message.println("Govind Seshadri"); 
message.println("jGuru.com"); 
message.println(); 
client.closeServer(); 
} 
catch (IOException e){ 
System.out.println("ERROR SENDING EMAIL:"+e); 
} 
%> 


二、 JavaMail是官方的 Java mail API，可参考 http://java.sun.com/products/javamail/。虽然该API比 sun.net.smtp.SmtpClient更丰富或者说更复杂，但它是可移植的。这里重新创建了一个 MailSender类，它包含了 JavaMail API。如下所示： 


// ms_ prefix is for MailSender class variables 
// str prefix is for String 
// astr prefix is for array of Strings 
// strbuf prefix is for StringBuffers, etc. 
public MailSender( 
String strFrom, // sender 
String[] astrTo, // recipient(s) 
String[] astrBCC, // bcc recipient(s), optional 
String strSubject, // subject 
boolean debugging) 
{ 
ms_strFrom = strFrom; // who the message is from 
ms_astrTo = astrTo; // who (plural) the message is to 
ms_debugging = debugging; // who (plural) the message is to 

// set the host 
Properties props = new Properties(); 
props.put("mail.smtp.host", ms_strSMTPHost); 

// create some properties and get the default Session 
Session session = Session.getDefaultInstance(props, null); 
session.setDebug(ms_debugging); 

try { 
// create a message 
ms_msg = new MimeMessage(session); 

// set the from 
InternetAddress from = new InternetAddress(strFrom); 
ms_msg.setFrom(from); 

// set the to 
InternetAddress[] address = new InternetAddress[astrTo.length]; 
for (int i = 0; i astrTo.length; ++i) 
{ 
address[i] = new InternetAddress(astrTo[i]); 
} 
ms_msg.setRecipients(Message.RecipientType.TO, address); 

// set the bcc recipients 
if (astrBCC != null) 
{ 
address = new InternetAddress[astrBCC.length]; 
for (int i = 0; i astrBCC.length; ++i) 
{ 
eh.dbg("astrBCC[" + i + "] is: '" + astrBCC[i] + "'"); 
address[i] = new InternetAddress(astrBCC[i]); 
} 
ms_msg.setRecipients(Message.RecipientType.BCC, address); 
} 

// set the subject 
ms_msg.setSubject(strSubject); 

// set up the string buffer which will hold the message 
ms_strbufMsg = new StringBuffer(); 

} catch (MessagingException mex) { 
mex.printStackTrace(System.err); 
} catch (Exception ex) { 
ex.printStackTrace(System.err); 
} 
} 

public void ms_add(String strText) 
{ 
ms_strbufMsg.append(strText); 
} 

public void ms_send() 
{ 
try { 
// set the content as plain text 
ms_msg.setContent(new String(ms_strbufMsg), "text/plain"); 

// and away 
Transport.send(ms_msg); 
} catch (Exception ex) { 
System.out.println("Caught exception in MailSender.ms_send: " + ex); 
} 
} 

本栏<img src ="http://www.blogjava.net/xixidabao/aggbug/47228.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-05-20 22:21 <a href="http://www.blogjava.net/xixidabao/articles/47228.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java编程实现列表框元素动态变化</title><link>http://www.blogjava.net/xixidabao/articles/47054.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Fri, 19 May 2006 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/47054.html</guid><description><![CDATA[　<B>摘</B><B> </B><B>要</B> 本文针对Java语言的特点，提出了在程序中动态添加和删除列表框中的列表元素并在结束操作时获取列表元素的实现方法，并给出了具体开发的实例。<BR><BR><B>　　关键词</B> Java 列表框<BR><BR><B>　　引言</B><BR><BR>　　Java是一种纯粹的面向对象的编程语言，由于具有良好的移植性已经成为程序员开发应用系统的常用工具。在开发人机交互界面时，程序员与用户都想尽量少的输入数据。如果有很多固定的选项供用户选择，列表框是很好的解决方案。用户在列表框中选择所需要的列表元素，可以在另外一个列表框中显示出来，后一列表框中的元素就要能够动态的添加和删除，最后需要获得用户选择的列表元素值进行其他的运算或者处理。由于Java语言的特点，解决这个问题还需要一定的技巧，下面给出了对这一问题的<a href="http://www.yesky.com/key/4799/644799.html" class="bluekey" target="_blank">解决方法</a>。<BR><BR><B>　　实现方法</B><BR><BR>　　1、初始化<BR><BR>　　首先添加JScrollPane的实例jScrollPane1，DefaultListModel 实例model1，然后使用model1生成JList的实例。在对话框合适的位置添加jScrollPane1，调整到合适的大小，然后在jScrollPane1上增加jList1。这样带有滚动条的列表框就添加完成了。<BR><BR>　　初始化一个Vector实例用来存储选择的列表元素。由于选择的元素具有不确定性，所以使用Vector这种存储空间可以动态变化的<a href="http://www.yesky.com/key/837/837.html" class="bluekey" target="_blank">数据结构</a>。Vector初始化实例时不能指定初始化长度，所以增加一个整形变量指示Vector中列表中对象的个数。<BR><BR>　　2、添加和删除列表元素<BR><BR>　　列表框中的元素添加和删除是通过model1的addElement方法和removeElement方法实现的。通过列表框的属性selectionMode可以设置列表框单选，单个间断选择和多个间断选择。Vector中存储的对象是和选择的元素相对应的，对象的添加和删除是通过addElement方法和removeElement方法实现的。<BR><BR>　　3、获得选择元素<BR><BR>　　在点击“确定”<a href="http://www.yesky.com/key/4880/4880.html" class="bluekey" target="_blank">按钮</a>以后，需要将Vector实例中的对象转化成为需要的数据类型。<BR><BR><B>　　实例解析</B><BR><BR>　　现以图1所示为例对具体实现方法进行描述。由图1中左面列表框中选择可用元素，选择方式设为多个间断选择，由于其他两种方式相对简单，实现方法可在这个实例的基础上修改得到。选定元素之后，点击“&gt;&gt;”按钮，选择的元素就会在右面的列表框显示出来。如果多选或者错选，可在右面的列表框中选定元素后点击“&lt;&lt;”按钮移去选定的元素。<BR><B></B><BR>
<P align=center><IMG src="/imagelist/05/12/t4m44a156207.gif" border=0><BR>图1 列表框示例</P><BR>　　具体程序实现方法如下。<BR><BR>　　1） 初始化(仅给出初始化左面的列表框)<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>private JScrollPane jScrollPane1 = new JScrollPane();<BR>DefaultListModel model1 = new DefaultListModel();<BR>private JList jList1 = new JList(model1);<BR>private Vector selectedElement = new Vector();<BR>private int selectedNumber = 0;</TD></TR></TBODY></TABLE><BR>　　2）添加和删除元素<BR><BR>　　向右面的列表框中添加元素，也就是单击“&gt;&gt;”按钮执行的操作。<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>for(int i = 0;i&lt; jList1.getSelectedValues().length; i++)<BR>{<BR>　//选择多个元素，逐个进行操作<BR>　selectedElement.addElement(jList1.getSelectedValues()[i]); //Vector实例中增加对象<BR>　model2.addElement(jList1.getSelectedValues()[i]); //右面的列表中增加元素<BR>　selectedNumber = selectedNumber + 1; //选定元素个数加1<BR>　selectedElement.setSize(selectedNumber); //设定Vector实例的长度<BR>}</TD></TR></TBODY></TABLE><BR>　　从右面的列表框中选择元素进行删除，也就是单击“&lt;&lt;”按钮执行的操作。<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>for(int i = 0;i&lt; jList2.getSelectedValues().length; i++)<BR>{<BR>　selectedElement.removeElement(jList2.getSelectedValues()[0]);<BR>　model2.removeElement(jList2.getSelectedValues()[0]);<BR>　//减少元素,需要注意每次移去的都是第0个元素<BR>　selectedNumber = selectedNumber - 1;<BR>　selectedElement.setSize(selectedNumber);<BR>}</TD></TR></TBODY></TABLE><BR>　　3）获取选择的元素<BR><BR>　　以将选定的元素转换成<a href="http://www.yesky.com/key/4578/14578.html" class="bluekey" target="_blank">字符串</a>类型为例，这段代码一般放在“确定”按钮的单击操作里面。<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>String［］ selectedProduct = new String[selectedElement.size()];<BR>for (int i = 0; i &lt; selectedElement.size(); i++) {<BR>　selectedProduct[i] = (String)selectedElement.elementAt(i); //强制<a href="http://www.yesky.com/key/2166/12166.html" class="bluekey" target="_blank">类型转换</a>成为字符串<BR>}</TD></TR></TBODY></TABLE><BR><B>　　总结</B><BR><BR>　　本文给出了实现Java列表框中元素动态添加、删除操作和获得用户选择的元素值的方法和实例，解决了Java程序设计中的列表框元素的动态变化问题。<BR><BR>
<img src ="http://www.blogjava.net/xixidabao/aggbug/47054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-05-19 14:29 <a href="http://www.blogjava.net/xixidabao/articles/47054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正则表达式和Java编程语言</title><link>http://www.blogjava.net/xixidabao/articles/46781.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Thu, 18 May 2006 04:56:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/46781.html</guid><description><![CDATA[　应用程序常常需要有文本处理功能，比如单词查找、电子邮件确认或XML文档 集成。这通常会涉及到模式匹配。Perl、sed或awk等语言通过使用正则表达式来 改善模式匹配，正则表达式是一串字符，它所定义的模式可用来查找匹配的文本。 为了使用Java<FONT size=-2><SUP><a href="http://www.yesky.com/key/1479/161479.html" class="bluekey" target="_blank">TM</a></SUP></FONT>编程语言进行模式匹配，需 要使用带有许多<CODE><FONT face=新宋体>charAt</FONT></CODE>子字串的<CODE><FONT face=新宋体>StringTokenizer</FONT></CODE> 类，读取字母或符号以便处理文本。这常常导致复杂或凌乱的代码。 
<P>　　现在不一样了。</P>
<P>　　2平台<a href="http://www.yesky.com/key/4522/159522.html" class="bluekey" target="_blank">标准版</a>（J2SE<FONT size=-2><SUP>TM</SUP></FONT>）1.4版包含一个名 为<CODE><FONT face=新宋体>java.util.regex</FONT></CODE>的新<a href="http://www.yesky.com/key/3885/173885.html" class="bluekey" target="_blank">软件包</a>，使得使用正则表达式成为可能。 目前的功能包括元字符的使用，它赋予正则表达式极大的灵活性</P>
<P>　　本文概括地介绍了正则表达式的使用，并详细解释如何利用 <CODE><FONT face=新宋体>java.util.regex</FONT></CODE>软件包来使用正则表达式，用以下常见情形作为 例子：</P>
<P>
<UL>
<LI>简单的单词替换 
<LI>电子邮件确认 
<LI>从文件中删除控制字符 
<LI>查找文件 </LI></UL>
<P></P>
<P>　　为了编译这些例子中的代码和在应用程序中使用正则表达式，需要安装 J2SE 1.4版。</P>
<P>　　<B>构造正则表达式</B> 
<P>　　正则表达式是一种字符模式，它描述的是一组字符串。你可以使用 <CODE><FONT face=新宋体>java.util.regex</FONT></CODE>软件包，查找、显示或修改输入序列中出现的 某个模式的一部分或全部。</P>
<P>　　正则表达式最简单的形式是一个精确的字符串，比如“Java”或 “programming”。正则表达式匹配还允许你检查一个字符串是否符合某个具体的 句法形式，比如是不是一个电子<a href="http://www.yesky.com/key/1215/176215.html" class="bluekey" target="_blank">邮件地址</a>。</P>
<P>　　为了<a href="http://www.yesky.com/key/4285/189285.html" class="bluekey" target="_blank">编写</a>正则表达式，普通字符和特殊字符都要使用：</P>
<P>
<TABLE cellPadding=4 width=300 align=center border=1>
<TBODY>
<TR>
<TD>\$</TD>
<TD>^</TD>
<TD>.</TD>
<TD>*</TD></TR>
<TR>
<TD>+</TD>
<TD>?</TD>
<TD>['</TD>
<TD>']</TD></TR>
<TR>
<TD>\.</TD>&nbsp; 
<TD>&nbsp;</TD>
<TD>&nbsp;</TD>
<TD>&nbsp;</TD></TR></TBODY></TABLE>
<P>　　正则表达式中出现的任何其他字符都是普通字符，除非它前面有个 <CODE><FONT face=新宋体>\</FONT></CODE>。</P>
<P>　　特殊字符有着特别的用处。例如，.可匹配除了换行符之外的任意字符。与 <CODE><FONT face=新宋体>s.n</FONT></CODE>这样的正则表达式匹配的是任何三个字符的、以<CODE><FONT face=新宋体>s</FONT></CODE> 开始以<CODE><FONT face=新宋体>n</FONT></CODE>结束的字符串，包括<CODE><FONT face=新宋体>sun</FONT></CODE>和<CODE><FONT face=新宋体>son</FONT></CODE> 。</P>
<P>　　在正则表达式中有许多特殊字符，可以查找一行开头的单词，忽略大小写或 大小写敏感的单词，还有特殊字符可以给出一个范围，比如<CODE><FONT face=新宋体>a-e</FONT></CODE>表 示从<CODE><FONT face=新宋体>a</FONT></CODE>到<CODE><FONT face=新宋体>e</FONT></CODE>的任何字母。</P>
<P>　　使用这个新软件包的正则表达式用法与Perl类似，所以如果你熟悉Perl中正则 表达式的使用，就可以在Java语言中使用同样的表达式语法。如果你不熟悉正则 表达式，下面是一些入门的例子：</P>
<P>
<TABLE cellSpacing=0 cellPadding=0 align=center border=0>
<TBODY>
<TR>
<TH height=30>构造</TH>
<TH height=30>匹配于</TH></TR>
<TR></TR>
<TR>
<TH align=left height=20>字符</TH>
<TH align=left height=20>&nbsp;</TH></TR>
<TR>
<TD vAlign=top height=20><I>x</I></TD>
<TD height=20>字符 <I>x</I></TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\\</FONT></CODE></TD>
<TD height=20>反斜线字符</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\0</FONT></CODE><I>n</I></TD>
<TD height=20>八进制值的字符<CODE><FONT face=新宋体>0</FONT></CODE><I>n</I> (0&nbsp;<CODE><FONT face=新宋体>&lt;=</FONT></CODE>&nbsp;<I>n</I>&nbsp;<CODE><FONT face=新宋体>&lt;=</FONT></CODE>&nbsp;7)</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\0</FONT></CODE><I>nn</I></TD>
<TD height=20>八进制值的字符 <CODE><FONT face=新宋体>0</FONT></CODE><I>nn</I> (0&nbsp;<CODE><FONT face=新宋体>&lt;=</FONT></CODE>&nbsp;<I>n</I>&nbsp;<CODE><FONT face=新宋体>&lt;=</FONT></CODE>&nbsp;7)</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\0</FONT></CODE><I>mnn</I></TD>
<TD height=20>八进制值的字符0mnn <CODE><FONT face=新宋体>0</FONT></CODE><I>mnn</I> (0&nbsp;<CODE><FONT face=新宋体>&lt;=</FONT></CODE>&nbsp;<I>m</I>&nbsp;<CODE><FONT face=新宋体>&lt;=</FONT></CODE>&nbsp;3, 0&nbsp;<CODE><FONT face=新宋体>&lt;=</FONT></CODE>&nbsp;<I>n</I>&nbsp;<CODE><FONT face=新宋体>&lt;=</FONT></CODE>&nbsp;7)</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\x</FONT></CODE><I>hh</I></TD>
<TD height=20>十六进制值的字符<CODE><FONT face=新宋体>0x</FONT></CODE><I>hh</I></TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\u</FONT></CODE><I>hhhh</I></TD>
<TD height=20>十六进制值的字符<CODE><FONT face=新宋体>0x</FONT></CODE><I>hhhh</I></TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\t</FONT></CODE></TD>
<TD height=20>制表符(<CODE><FONT face=新宋体>'\u0009'</FONT></CODE>)</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\n</FONT></CODE></TD>
<TD height=20>换行符 (<CODE><FONT face=新宋体>'\u000A'</FONT></CODE>)</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\r</FONT></CODE></TD>
<TD height=20>回车符 (<CODE><FONT face=新宋体>'\u000D'</FONT></CODE>)</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\f</FONT></CODE></TD>
<TD height=20>换页符 (<CODE><FONT face=新宋体>'\u000C'</FONT></CODE>)</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\a</FONT></CODE></TD>
<TD height=20>响铃符 (<CODE><FONT face=新宋体>'\u0007'</FONT></CODE>)</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\e</FONT></CODE></TD>
<TD height=20>转义符 (<CODE><FONT face=新宋体>'\u001B'</FONT></CODE>)</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\c</FONT></CODE><I>x</I></TD>
<TD height=20>T对应于x的控制字符 <I>x</I></TD></TR>
<TR>
<TH height=20>&nbsp;</TH></TR>
<TR>
<TH align=left colSpan=2 height=25>字符类</TH></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>[abc]</FONT></CODE></TD>
<TD height=20><CODE><FONT face=新宋体>a</FONT></CODE>, <CODE><FONT face=新宋体>b</FONT></CODE>, or <CODE><FONT face=新宋体>c</FONT></CODE> (简单类)</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>[^abc]</FONT></CODE></TD>
<TD height=20>除了<CODE><FONT face=新宋体>a</FONT></CODE>、<CODE><FONT face=新宋体>b</FONT></CODE>或<CODE><FONT face=新宋体>c</FONT></CODE>之外的任意 字符（求反）</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>[a-zA-Z]</FONT></CODE></TD>
<TD height=20><CODE><FONT face=新宋体>a</FONT></CODE>到<CODE><FONT face=新宋体>z</FONT></CODE>或<CODE><FONT face=新宋体>A</FONT></CODE>到<CODE><FONT face=新宋体>Z</FONT></CODE> ，包含（范围)</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>[a-z-[bc]]</FONT></CODE></TD>
<TD height=20><CODE><FONT face=新宋体>a</FONT></CODE>到<CODE><FONT face=新宋体>z</FONT></CODE>，除了<CODE><FONT face=新宋体>b</FONT></CODE>和<CODE><FONT face=新宋体>c</FONT></CODE> ： <CODE><FONT face=新宋体>[ad-z]</FONT></CODE>（减去）</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>[a-z-[m-p]]</FONT></CODE></TD>
<TD height=20><CODE><FONT face=新宋体>a</FONT></CODE>到<CODE><FONT face=新宋体>z</FONT></CODE>，除了<CODE><FONT face=新宋体>m</FONT></CODE>到 <CODE><FONT face=新宋体>p</FONT></CODE>： <CODE><FONT face=新宋体>[a-lq-z]</FONT></CODE></TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>[a-z-[^def]]</FONT></CODE></TD>
<TD height=20><CODE><FONT face=新宋体>d</FONT></CODE>, <CODE><FONT face=新宋体>e</FONT></CODE>, 或 <CODE><FONT face=新宋体>f</FONT></CODE></TD>
<TR></TR>
<TR>
<TH align=left colSpan=2 height=30>预定义的字符类</TH></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>.</FONT></CODE></TD>
<TD height=20>任意字符（也许能与行终止符匹配，也许不能）</TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\d</FONT></CODE></TD>
<TD height=20>数字: <CODE><FONT face=新宋体>[0-9]</FONT></CODE></TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\D</FONT></CODE></TD>
<TD height=20>非数字: <CODE><FONT face=新宋体>[^0-9]</FONT></CODE></TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\s</FONT></CODE></TD>
<TD height=20>空格符: <CODE><FONT face=新宋体>[ \t\n\x0B\f\r]</FONT></CODE></TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\S</FONT></CODE></TD>
<TD height=20>非空格符: <CODE><FONT face=新宋体>[^\s]</FONT></CODE></TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\w</FONT></CODE></TD>
<TD height=20>单词字符: <CODE><FONT face=新宋体>[a-zA-Z_0-9]</FONT></CODE></TD></TR>
<TR>
<TD vAlign=top height=20><CODE><FONT face=新宋体>\W</FONT></CODE></TD>
<TD height=20>非单词字符: <CODE><FONT face=新宋体>[^\w]</FONT></CODE></TD></TR></TBODY></TABLE></P>
<br>
<br>
<br><STRONG>黑暗岁月</STRONG><BR><BR>　　有一个String，如何查询其中是否有y和f字符？最黑暗的办法就是： <BR><BR>　　程序1：我知道if、for语句和charAt()啊。<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>class Test{<BR>　public static void main(String args[]) {<BR>　　String <a href="http://www.yesky.com/key/2805/182805.html" class="bluekey" target="_blank">str</a>="For my money, the important thing "+"about the meeting was bridge-building";<BR>　　<a href="http://www.yesky.com/key/3784/213784.html" class="bluekey" target="_blank">char</a> x='y';<BR>　　char y='f';<BR>　　boolean result=false;<BR>　　for(int i=0;i＜str.length;i++){<BR>　　　char z=str.charAt(i); //System.out.println(z);<BR>　　　if(x==z||y==z) {<BR>　　　　result=true;<BR>　　　　break;<BR>　　　}<BR>　　　else result=false;<BR>　　} <BR>　　System.out.println(result);<BR>　}<BR>}</TD></TR></TBODY></TABLE><BR>　　好像很直观，但这种方式难以应付复杂的工作。如查询一段文字中，是否有is？是否有thing或ting等。这是一个讨厌的工作。<BR><BR>　　Java的java.util.regex包<BR><BR>　　按照面向对象的思路，把希望查询的字符串如is、thing或ting封装成一个对象，以这个对象作为模板去匹配一段文字，就更加自然了。作为模板的那个东西就是下面要讨论的正则表达式。先不考虑那么复杂，看一个例子： 程序2：不懂。先看看可以吧？<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>import java.util.regex.*;<BR><BR>class Regex1{<BR>　public static void main(String args[]) {<BR>　　String str="For my money, the important thing "+"about the meeting was bridge-building";<BR>　　String regEx="a|f"; //表示a或f <BR>　　Pattern p=Pattern.compile(regEx);<BR>　　Matcher m=p.matcher(str);<BR>　　boolean result=m.<a href="http://www.yesky.com/key/2359/212359.html" class="bluekey" target="_blank">find</a>();<BR>　　System.out.println(result);<BR>　}<BR>}</TD></TR></TBODY></TABLE><BR>　　如果str匹配regEx，那么result为true，否则为flase。如果想在查找时忽略大小写，则可以写成：<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>Pattern p=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);</TD></TR></TBODY></TABLE><BR>　　虽然暂时不知道Pattern（模板、模式）和Matcher（匹配器）的细节，程序的感觉就比较爽，如果先查询is、后来又要查询thing或ting，我们只需要修改一下模板Pattern，而不是考虑if语句和for语句，或者通过charAt()。<BR><BR>　　1、写一个特殊的字符串——正则表达式如a|f。<BR><BR>　　2、将正则表达式编译成一个模板：p<BR><BR>　　3、用模板p去匹配字符串str。<BR><BR>　　思路清楚了，现在看Java是如何处理的（Java程序员直到JDK1.4才能使用这些类。<BR><BR>　　Pattern类与查找<BR><BR>　　①public final class java.util.regex.Pattern是正则表达式编译后的表达法。下面的语句将创建一个Pattern对象并赋值给句柄p：Pattern p=Pattern.compile(regEx);<BR><BR>　　有趣的是，Pattern类是final类，而且它的构造器是private。也许有人告诉你一些设计模式的东西，或者你自己查有关资料。这里的结论是：Pattern类不能被继承，我们不能通过new创建Pattern类的对象。<BR><BR>　　因此在Pattern类中，提供了2个重载的静态方法，其返回值是Pattern对象（的引用）。如：<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>public static Pattern compile(String regex) {<BR>　return new Pattern(regex, 0);<BR>}</TD></TR></TBODY></TABLE><BR>　　当然，我们可以声明Pattern类的句柄，如Pattern p=null；<BR><BR>　　②p.matcher(str)表示以用模板p去生成一个字符串str的匹配器，它的返回值是一个Matcher类的引用，为什么要这个东西呢？按照自然的想法，返回一个boolean值不行吗？<BR><BR>　　我们可以简单的使用如下方法：<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>boolean result=Pattern.compile(regEx).matcher(str).find();</TD></TR></TBODY></TABLE><BR>　　其实是三个语句合并的无句柄方式。无句柄常常不是好方式。后面再学习Matcher类吧。先看看regEx——这个怪咚咚。<BR><BR>　　<B>正则表达式之限定符</B><BR><BR>　　正则表达式（<a href="http://www.yesky.com/key/3266/208266.html" class="bluekey" target="_blank">Regular</a> Expression）是一种生成字符串的字符串。晕吧。比如说，String regEx="me+";这里字符串me+能够生成的字符串是：me、mee、meee、meeeeeeeeee等等，一个正则表达式可能生成无穷的字符串，所以我们不可能（有必要吗？）输出正则表达式产生的所有东西。<BR><BR>　　反过来考虑，对于字符串：me、mee、meee、meeeeeeeeee等等，我们能否有一种语言去描述它们呢？显然，正则表达式语言是这种语言，它是一些字符串的模式——简洁而深刻的描述。<BR><BR>　　我们使用正则表达式，用于字符串查找、匹配、指定字符串替换、字符串分割等等目的。<BR><BR>　　生成字符串的字符串——正则表达式，真有些复杂，因为我们希望由普通字符（例如字符 a 到 z）以及特殊字符（称为元字符）描述任意的字符串，而且要准确。<BR><BR>　　先看几个正则表达式例子：<BR><BR>　　程序3：我们总用这个程序测试正则表达式。<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e3e3e3 border=1>
<TBODY>
<TR>
<TD>import java.util.regex.*;<BR><BR>class Regex1{<BR>　public static void main(String args[]) {<BR>　　String str="For my money, the important thing "；<BR>　　String regEx="ab*"; <BR>　　boolean result=Pattern.compile(regEx).matcher(str).find();<BR>　　System.out.println(result);<BR>　}<BR>}//ture</TD></TR></TBODY></TABLE><BR>　　①"ab*"——能匹配a、ab、<a href="http://www.yesky.com/key/4785/214785.html" class="bluekey" target="_blank">abb</a>、abbb……。所以，*表示前面字符可以有零次或多次。如果仅仅考虑查找，直接用"a"也一样。但想想替换的情况。 问题regEx="abb*"结果如何？<BR><BR>　　②"ab+"——能匹配ab、abb、abbb……。等价于"abb*"。问题regEx="or+"结果如何？<BR><BR>　　③"or?"——能匹配o和or。? 表示前面字符可以有零次或一次。<BR><BR>　　这些限定符*、+、?方便地表示了其前面字符(子串)出现的次数（我们用{}来描述）： x*，零次或多次 ≡{0,}
</div>
<img src ="http://www.blogjava.net/xixidabao/aggbug/46781.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-05-18 12:56 <a href="http://www.blogjava.net/xixidabao/articles/46781.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>技术解析：什么是模式？什么是框架？</title><link>http://www.blogjava.net/xixidabao/articles/45060.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Mon, 08 May 2006 09:59:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/45060.html</guid><description><![CDATA[<br>　　现在软件设计里到处都是模式，框架。有次朋友问什么是模式？我也在学习中，就我的学习经验，给出以下小结。（注意：个人观点，仅供参考，欢迎指正。）<br>　　<br>　　<b>1．什么是模式？</b><br>　　<br>　　模式，即pattern。其实就是解决某一类问题的方法论。你把解决某类问题的方法总结归纳到理论高度，那就是模式。<br>　　<br>　　Alexander给出的经典定义是：每个模式都描述了一个在我们的环境中不断出现的问题，然后描述了该问题的解决方案的核心。通过这种方式，你可以无数次地使用那些已有的解决方案，无需在重复相同的工作。<br>　　<br>　　模式有不同的领域，建筑领域有建筑模式，软件设计领域也有设计模式。当一个领域逐渐成熟的时候，自然会出现很多模式。<br>　　<br>　　<b>什么是框架？</b><br>　　<br>　　框架，即framework。其实就是某种应用的半成品，就是一组组件，供你选用完成你自己的系统。简单说就是使用别人搭好的舞台，你来做表演。而且，框架一般是成熟的，不断升级的软件。<br>　　<br>　　<b>2．为什么要用模式？</b><br>　　<br>　　因为模式是一种指导，在一个良好的指导下，有助于你完成任务，有助于你作出一个优良的设计方案，达到事半功倍的效果。而且会得到解决问题的最佳办法。<br>　　<br>　　为什么要用框架？<br>　　<br>　　因为软件系统发展到今天已经很复杂了，特别是服务器端软件，设计到的知识，内容，问题太多。在某些方面使用别人成熟的框架，就相当于让别人帮你完成一些基础工作，你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟，稳健的，他可以处理系统很多细节问题，比如，事物处理，安全性，数据流控制等问题。还有框架一般都经过很多人使用，所以结构很好，所以扩展性也很好，而且它是不断升级的，你可以直接享受别人升级代码带来的好处。<br>　　<br>　　框架一般处在低层应用平台（如J2EE）和高层业务逻辑之间的中间层。<br>　　<br>　　<b>软件为什么要分层？</b><br>　　<br>　　为了实现“高内聚、低耦合”。把问题划分开来各个解决，易于控制，易于延展，易于分配资源…总之好处很多啦：）。<br>　　<br>　　<b>3．以下所述主要是JAVA，J2EE方面的模式和框架：</b><br>　　<br>　　<b>常见的设计模式有什么？</b><br>　　<br>　　首先，你要了解的是GOF的《设计模式--可复用面向对象软件的基础》一书（这个可以说是程序员必备的了），注意：GOF不是一个人，而是指四个人。它的原意是Gangs Of Four,就是“四人帮”，就是指此书的四个作者：Erich Gamma,Richard Helm，Ralph Johnson,John Vlissides。这本书讲了23种主要的模式，包括：抽象工厂、适配器、外观模式等。<br>　　<br>　　还有其他的很多模式，估计有100多种。<br>　　<br>　　软件设计模式太多，就我的理解简单说一下最常见的MVC模式。<br>　　<br>　　MVC模式是1996年由Buschmann提出的：<br>　　<br>　　模型（Model）：就是封装数据和所有基于对这些数据的操作。<br>　　<br>　　视图（View）：就是封装的是对数据显示，即用户界面。<br>　　<br>　　控制器（Control）：就是封装外界作用于模型的操作和对数据流向的控制等。<br>　　<br>　　另外：<br>　　<br>　　RUP（Rational Unified Process）软件统一过程，XP（Extreme Programming）极端编程，这些通常被叫做“过程方法”，是一种软件项目实施过程的方法论，它是针对软件项目的实施过程提出的方法策略。也是另一个角度的模式。<br>　　<br>　　<b>4．常见的JAVA框架有什么？</b><br>　　<br>　　<b>WAF：</b><br>　　<br>　　全称：WEB APPLICATION FRAMEWORK<br>　　<br>　　主要应用方面：EJB层，（WEB层也有，但是比较弱）。<br>　　<br>　　主要应用技术：EJB等<br>　　<br>　　出处：http://java.sun.com/blueprints/code/index.html<br>　　<br>　　简述：这是SUN在展示J2EE平台时所用的例子PetStore(宠物商店系统)里面的框架。是SUN蓝皮书例子程序中提出的应用框架。它实现了 MVC和其他良好的设计模式。SUN的网站上有技术资料，最好下载PetStore来研究，WEBLOGIC里自带此系统，源码在bea\weblogic700\samples\server\src\petstore。这是学习了解J2EE的首选框架。<br>　　<br>　　<b>Struts:</b><br>　　<br>　　主要应用方面：WEB层。<br>　　<br>　　主要应用技术：JSP,TagLib,JavaBean,XML等<br>　　<br>　　出处：http://jakarta.apache.org/struts/index.html<br>　　<br>　　简述：这是APACHE的开源项目，目前应用很广泛。基于MVC模式，结构很好，基于JSP。Jbuilder8里已经集成了STRUTS1.02的制作。<br>　　<br>　　简述WAF+STRUTS结合的例子：WEB层用STRUTS，EJB层用WAF：<br>　　<br>　　JSP(TagLib)——>ActionForm——>Action　——>　Event——>EJBAction——>EJB　　——>DAO——>Database　JSP（TagLib） (forward) <——Action　<——EventResponse<——<br>　　<br>　　<b>Turbine：</b><br>　　<br>　　主要应用方面：WEB层。<br>　　<br>　　主要应用技术：servlet等<br>　　<br>　　出处：http://jakarta.apache.org/turbine/index.html<br>　　<br>　　简述：这是APACHE的开源项目。基于SERVLET。据说速度比较快，基于service（pluggable implementation可插拔的执行组件）的方式提供各种服务。<br>　　<br>　　<b>COCOON：</b><br>　　<br>　　主要应用方面：WEB层。<br>　　<br>　　主要应用技术：XML，XSP，servlet等<br>　　<br>　　出处：http://cocoon.apache.org/2.0/<br>　　<br>　　简述：这是APACHE的一个开源项目。基于XML，基于XSP（通俗地说，XSP是在XML静态文档中加入Java程序段后形成的动态XML文档。）。特点是可以与多种数据源交互，包括文件系统，数据库，LDAP，XML资源库，网络数据源等。<br>　　<br>　　<b>ECHO</b>：<br>　　<br>　　主要应用方面：WEB层。<br>　　<br>　　主要应用技术：servlet等<br>　　<br>　　出处：http://www.nextapp.com/products/echo/<br>　　<br>　　简述：nextapp公司的一个开源项目。基于SERVLET。页面可以做的很漂亮，结合echopoint，可以作出很多图形效果（里面用了jfreechart包）。使用SWING的思想来作网页，把HTML当作JAVA的类来做。但是大量使用Session，页面分帧（Frame）很多,系统资源消耗很大。<br>　　<br>　　<b>JATO</b>：<br>　　<br>　　全称：SUN ONE Application Framework<br>　　<br>　　主要应用方面：WEB层。<br>　　<br>　　主要应用技术：JSP,TagLib,JavaBean等<br>　　<br>　　出处：http://www.sun.com/<br>　　<br>　　简述：这是SUN推出的一个商业性框架，一看名字就知道是结合SUN ONE的平台推出的。我下载了JATO2.0看了一下，感觉有些简单，使用了JSP＋TagLib+JavaBean。如他的DOC所说JATO是适合用在小的WEB应用里。<br>　　<br>　　<b>TCF：</b><br>　　<br>　　全称：Thin-Client Framework<br>　　<br>　　主要应用方面：JAVA GUI。<br>　　<br>　　主要应用技术：JAVA application等<br>　　<br>　　出处：http://www.alphaworks.ibm.com/tech/tcf<br>　　<br>　　简述：这是IBM出的一个框架。基于MVC模式，基于JAVA Application。推荐一篇介绍文章：http://www-900.ibm.com/developerWorks/cn/java/j-tcf1/index.shtml 
    <br><br><br> <img src ="http://www.blogjava.net/xixidabao/aggbug/45060.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-05-08 17:59 <a href="http://www.blogjava.net/xixidabao/articles/45060.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java学习从入门到精通 1工具篇</title><link>http://www.blogjava.net/xixidabao/articles/44072.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Sat, 29 Apr 2006 12:16:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/44072.html</guid><description><![CDATA[Java Learning Path （一）、工具篇 

　　一、 JDK (Java Development Kit) 

　　JDK是整个Java的核心，包括了Java运行环境（Java Runtime Envirnment），一堆Java工具和Java基础的类库(rt.jar)。不论什么Java应用服务器实质都是内置了某个版本的JDK。因此掌握JDK是学好Java的第一步。最主流的JDK是Sun公司发布的JDK，除了Sun之外，还有很多公司和组织都开发了自己的JDK，例如IBM公司开发的JDK，BEA公司的Jrocket，还有GNU组织开发的JDK等等。其中IBM的JDK包含的JVM（Java Virtual Machine）运行效率要比Sun JDK包含的JVM高出许多。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。但不管怎么说，我们还是需要先把Sun JDK掌握好。 

　　1、 JDK的下载和安装 

　　JDK又叫做J2SE（Java2 SDK Standard Edition），可以从Sun的Java网站上下载到，http://java.sun.com/j2se/downloads.html ，JDK当前最新的版本是J2SDK1.4.2，建议下载该版本的JDK，下载页面在这里：http://java.sun.com/j2se/1.4.2/download.html。 

　　下载好的JDK是一个可执行安装程序，默认安装完毕后会在C:\Program Files\Java\目录下安装一套JRE（供浏览器来使用），在C:\j2sdk1.4.2下安装一套JDK（也包括一套JRE）。然后我们需要在环境变量PATH的最前面增加java的路径C:\j2sdk1.4.2\bin。这样JDK就安装好了。 

　　2、 JDK的命令工具 

　　JDK的最重要命令行工具： 

　　java： 启动JVM执行class 

　　javac： Java编译器 

　　jar： Java打包工具 

　　javadoc： Java文档生成器 

　　这些命令行必须要非常非常熟悉，对于每个参数都要很精通才行。对于这些命令的学习，JDK Documentation上有详细的文档。 

　　

　　二、 JDK Documentation 

　　Documentation在JDK的下载页面也有下载连接，建议同时下载Documentation。Documentation是最最重要的编程手册，涵盖了整个Java所有方面的内容的描述。可以这样说，学习Java编程，大部分时间都是花在看这个Documentation上面的。我是随身携带的，写Java代码的时候，随时查看，须臾不离手。 

　　

　　三、 应用服务器(App Server) 

　　App Server是运行Java企业组件的平台，构成了应用软件的主要运行环境。当前主流的App Server是BEA公司的Weblogic Server和IBM公司的Websphere以及免费的Jboss，选择其中一个进行学习就可以了，个人推荐Weblogic，因为它的体系结构更加干净，开发和部署更加方便，是Java企业软件开发人员首选的开发平台。下面简要介绍几种常用的App Server： 

　　1、 Tomcat 

　　Tomcat严格意义上并不是一个真正的App Server，它只是一个可以支持运行Serlvet/JSP的Web容器，不过Tomcat也扩展了一些App Server的功能，如JNDI，数据库连接池，用户事务处理等等。Tomcat被非常广泛的应用在中小规模的Java Web应用中，因此本文做一点下载、安装和配置Tomcat的介绍： 

　　Tomcat是Apache组织下Jakarta项目下的一个子项目，它的主网站是：http://jakarta.apache.org/tomcat/ ，Tomcat最新版本是Tomcat4.1.27，软件下载的连接是：http://www.apache.org/dist/jakarta/tomcat-4/binaries/ 。 

　　下载Tomcat既可以直接下载zip包，也可以下载exe安装包（个人建议zip更干净些），不管哪种情况，下载完毕安装好以后（zip直接解压缩就可以了）。需要设置两个环境变量： 

　　JAVA_HOME=C:\j2sdk1.4.2 

　　CATALINA_HOME=D:\tomcat4 (你的Tomcat安装目录) 

　　这样就安装好了，启动Tomcat运行CATALINA_HOME\bin\startup.bat，关闭Tomcat运行shutdown.bat脚本。Tomcat启动以后，默认使用8080端口，因此可以用浏览器访问http://localhost:8080来测试Tomcat是否正常启动。 

　　Tomcat提供了两个Web界面的管理工具，URL分别是： 

　　http://localhost:8080/admin/index.jsp 

　　http://localhost:8080/manager/html 

　　在启用这两个管理工具之前，先需要手工配置一下管理员用户和口令。用一个文本工具打开CATALINA_HOME\conf\tomcat-users.xml这个文件，加入如下几行： 

　　<role rolename="manager"/> 

　　<role rolename="admin"/> 

　　<user username="robbin" password="12345678" roles="admin,manager,tomcat"/> 

　　这样用户“robbin”就具备了超级管理员权限。重新启动Tomcat以后，你就可以使用该用户来登陆如上的两个管理工具，通过Web方式进行Tomcat的配置和管理了。 

　　2、 BEA Weblogic 

　　Weblogic可以到BEA的网站上免费注册之后下载到最新的Weblogic8.1企业版，License可以免费使用1年时间，其实这已经完全足够了。Weblogic的下载连接：http://commerce.bea.com/index.jsp，Weblogic的在线文档：http://edocs.bea.com/ 。 

　　3、 IBM Webshpere 

　　Websphere同样可以下载到免费的试用版本，到IBM的developerWorks网站可以看到Websphere试用产品的下载和相关的Websphere的资料，developerWorks中文网站的连接是：http://www-900.ibm.com/developerWorks/cn/wsdd/ ，Websphere的下载连接：http://www7b.software.ibm.com/wsdd/downloads/WASsupport.html 。 

　　4、 Jboss 

　　Jboss是免费开源的App Server，可以免费的从Jboss网站下载：http://www.jboss.org/index.html，然而Jboss的文档是不免费，需要花钱购买，所以为我们学习Jboss设置了一定的障碍。在Jdon上有几篇不错的Jboss配置文档，可以用来参考：http://www.jdon.com/idea.html 

　　

　　四、 Java应用的运行环境 

　　Java的应用可以简单分为以下几个方面： 

　　1、 Java的桌面应用 

　　桌面应用一般仅仅需要JRE的支持就足够了。 

　　2、 Java Web应用 

　　Java的Web应用至少需要安装JDK和一个web容器（例如Tomcat），以及一个多用户数据库，Web应用至少分为三层： 

　　Browser层：浏览器显示用户页面 

　　Web层：运行Servlet/JSP 

　　DB层：后端数据库，向Java程序提供数据访问服务 

　　3、 Java企业级应用 

　　企业级应用比较复杂，可以扩展到n层，最简单情况会分为4层： 

　　Browser层：浏览器显示用户页面 

　　Client层：Java客户端图形程序（或者嵌入式设备的程序）直接和Web层或者EJB层交互 

　　Web层：运行Servlet/JSP 

　　EJB层：运行EJB，完成业务逻辑运算 

　　DB层：后端数据库，向Java程序提供数据访问服务 

　　4、 Java嵌入式应用 

　　Java嵌入式应用是一个方兴未艾的领域，从事嵌入式开发，需要从Sun下载J2ME开发包，J2ME包含了嵌入式设备专用虚拟机KVM，和普通的JDK中包含的JVM有所不同。另外还需要到特定的嵌入式厂商那里下载模拟器。 

<img src ="http://www.blogjava.net/xixidabao/aggbug/44072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-04-29 20:16 <a href="http://www.blogjava.net/xixidabao/articles/44072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>70个JAVA问答(46--70)</title><link>http://www.blogjava.net/xixidabao/articles/41956.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Wed, 19 Apr 2006 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/41956.html</guid><description><![CDATA[
		<p>46. 问：怎样去掉字符串前后的空格。<br />答：String.trim()</p>
		<p>
				<br />47. 问：session怎样存取int类型的变量？<br />答：<br />session.setAttribute("int", i+"");<br />int i = Integer.parseInt(session.getAttribute("int"));</p>
		<p>
				<br />48. 问：在javascript中如何使输出的float类型的数据保留两位小数。<br />答：Math.round(aaaaa*100)/100。</p>
		<p>
				<br />49. 问：在bean种如何调用session<br />答：<br />你可把session对象作为一个参数传给bean<br />在BEAN中定义HttpServletRequest request;HttpSession session;<br />然后<br />session = request.getSession(false);<br />false为如果session为空,不建立新的session<br />将session作为参数传入.其实只要将request传入就可以</p>
		<p>
				<br />50. 问：如何把txt或word文件按原格式显示在jsp页面或servlet上？<br />答：<br />其实一个非常简单的解决方法就是在服务器的MIME中指点定TEXT和WORD的解释方式,然后用JSP或SERVLET生成它就行了,客户端就会自动调用相应程序打开你的文档。<br />如果是希望按原格式的显示在页面上，而不是调用其他程序打开那么你可以试试用WEBDEV协议,可以说这是MS的一个亮点.它是在WEB方式下打开文档,和共享一样.完全符合的要求。</p>
		<p>
				<br />51. 问：object的clone方法为什么不能直接调用？<br />答：<br />这个方法在object中是protected<br />为什么要把这个方法定义为protected,这是一个折中,它的目的是想知道你这个方法在Object里只是一个标记,而不是一个实现,比如</p>
		<p>public class Object<br />{</p>
		<p>.............<br />protected Object clone()<br />{}<br />}</p>
		<p>所以直接继承的clone()方法并不能做任何时,你要使用这个方法就要重载这个方法并放宽访问权限为public,或实现cloneable接口. 但它没法这样告诉你它没有真的实现,只好用protected 方法加以警示</p>
		<p>
				<br />52. 问：一个页面中如何刷新另外一个页面？<br />答：<br />要求是这些面页必须有关联,一是它们都有一个共同的顶层帧,也就是说是一个帧内的分级页面,当然可以是任意级,帧内再分帧也可以,另一个可能是当前窗口弹出的窗口,如果没有联系,那就不可能用一个页面刷新另一个页面. 帧内只要一级一级引用就行了. 比如在左帧中一个页面中写top.right.location.reload();那么名为right的右帧中的页面就会刷新. 弹出的一样,用open时的名称刷新子窗口,子窗口用opener刷新主窗口</p>
		<p>
				<br />53. 问：如何在jsp中怎么样向客户端写cookies？<br />答：<br />Cookie coo = new Cookie(name, value);<br />HttpServletResponse.addCookie(name);</p>
		<p>
				<br />54. 问：为什么jTextField1.setText("aaabbb");jTextField2.setText("AAABBB"); 得到的字体宽度不一样？<br />答：就是说如果不是指定为等宽字体,每个字体的宽度都是不一样的.因此JAVA中用FontMetrics 类来取字符宽度。</p>
		<p>
				<br />55. 问：String kk=application/octet-stream; name="G:/SMBCrack.exe";如何得到SMBCrack.exe？<br />答：<br />这应该是解析上传时候的二进制流得到的这一行里面格式是固定的，取到name="后面的字符串，然后把";去掉。然后取最后一个/后面的所有字符组成一个新字符串就行了。</p>
		<p>
				<br />56. 问：如何传值并不刷新页面？<br />答：<br />弹出一个页面进行值的选择或者输入，ok后使用将值传给原窗口，使用javascript关闭打开的窗口即可：<br />window.close();opener.focus();</p>
		<p> </p>
		<p>57. 问：有一个字符串："EF0C114EA4"，如何变为a[0] = 0xEF a[1] = 0x0C a[2] = 0x11 a[3] = 0x4E a[4] = 0xA4？<br />答：<br />String str="EF0C114EA4F";<br />out.print(str+"&lt;br&gt;");<br />int l=str.length()/2+str.length()%2,j=0,k=0;<br />String[] a=new String[l];<br />for(int i=0;i&lt;l;i++){<br />if(str.length()-j==1)<br />k=str.length();<br />else<br />k=j+2;<br />a="0x"+str.substring(j,k);<br />out.print("a["+Integer.toString(i)+"]="+a+"&lt;br&gt;");<br />j+=2;<br />}</p>
		<p>
				<br />58. 问：怎样将一个int转换成一个四字节的byte数组？<br />答：<br />int x = 1234567;<br />byte[] b = new byte[4];<br />for(int i=0;i&lt;b.length;i++)<br />{<br />b = (x &gt;&gt;( i*8)) &amp; 0xFF;<br />}</p>
		<p>
				<br />59. 问：indexOf()的使用需要注意什么？<br />答：参数是指从第几位（1，2，3，...）开始搜索，而返回值是指搜索到的位置（0，1，2，3.......）注意是从零算起的。</p>
		<p>
				<br />60. 问：在Java应用程序中如何动态的添加一个按钮？<br />答：<br />这里涉及一个组件重绘的问题,组件要先于panel被显示之处存在,如果一panel已经显示了,那么加在上面你能看到吗?但如果在同一个panel上, 先有button A,假如按下它加了butt on B,这时你如果使整个panel重给,那么A本身要重绘,它的事件监听就没有了,当然也就加不成B了,所以如果要先有另一个panel,当按A时把B加在这个panel上并重绘这个paenl,其实更好的方法是先把B加在panel中,同一个也行.把它setVisiable(flase),按A时设为 true。</p>
		<p>
				<br />61. 问：book mybook=new book(bookid);book是servlet,出错。<br />答：<br />book是servlet,能book mybook=new book(bookid);<br />说明自己实现了servlet容器?不然,servlet能让你自己去调用? servlet如果调用其实和EJB连1%的区别都没有,它们都是自己继承或实现一些接口,在这些父类或接口中实现了如果和容器\"打交道"的方法,然后容器调用这些方法来管理它,让它生成实例,池化,钝化,销毁,再生等.所以这样写是错误的。</p>
		<p>
				<br />62. 问：给定一个字符串5*(5+9)/7怎样计算出结果？<br />答：<br />可有两种方法<br />1。用堆栈完成<br />2。最简单的方法，不用编程，如果有任何一个数据库的化，用select (5*(5+9)/7) from oneTable</p>
		<p>
				<br />63. 问：如何实现递交表单内容的加密解密？<br />答：<br />如果你用IE目前只能用SSL协议,这一层不要你考虑,否则只你用你自己的工具加密传输,接收后再解密友,至于如何加解,如果要和公认的系统结合,就用通用的MD5,RAS等公开算法,如果你只是自己传自己解,你随便按你的想法把数据加上一些东西,取回来按规则减掉这些东西,我敢保证除你自己没有任何人能知道解密方法.</p>
		<p>
				<br />64. 问：为什么Integer.parseInt("+1");会抛出NumberFormatException的异常？<br />答：因为"+"运行算在JAVA中被重载.系统无法确定你用的是算术加还是字符+。<br />这一点可以在JAVASCRIPT中更好地理解:<br />&lt;form name="t"&gt;&lt;input name=s value=1234&gt;&lt;/form&gt;<br />var a = document.t.s.value+1;<br />这时a = 12345,因为document.t.s.value作为字符串.但var a = document.t.s.value-1;<br />a 就是1233,因为系统知道-运算肯定是算术运行.所以把document.t.s.value转换成数字.</p>
		<p> </p>
		<p>65. 问：hashCode() 有什么用为什么有时候需要覆盖Object里的hashcode()方法？<br />答：这就是这个对象的身份证啊,要不如何区分哪个对象。</p>
		<p>
				<br />66. 问：怎样在tomcat中实现一个定时执行的东东？<br />答：<br />在应用程序启动时自动运行。servlet2.3中定义了ServletListener,监听Servlet Con text的启动或则关闭（可在配置文件中配置），启动时触发一个守护程序的运行(可以实现java.util.Timer或则 javax.swing.Timer).</p>
		<p>
				<br />67. 问：程序可以输出自己吗？<br />答：孔德悖论这个非常有名的法则.就是说任何程序都不可能输出自己.</p>
		<p>
				<br />68. 问：能够把字符转化成ASCII码？比如将 A 转化成 65？<br />答：<br />int a='A';<br />out.println(a);</p>
		<p>
				<br />69. 问：如何区分输入的文字中的全角与半角？<br />答：由于不能分辨出全角和半角字符的值有什么规律,只好把全角符号牧举出来了.</p>
		<p>
				<br />70. 问：用户注册后的自动发信程序该怎么做？<br />答：<br />这种发信程序不考虑性能,因为不可能1秒就有一个人注册,我们说的考虑性能的发信程序是指上百万封信在队列里要不停发送的那种,象你这个随便怎么写一个程序都行,没有必要用JAVAMAIL.只要指定一个发信的服务器然后用cocket连它的25口就行了.自己用SOCKET连SMTP的25口发一封信就好象两个邻居之间送一样东西,直接递过去得了,用JAVAMAIL,消息机制就是你把这个东西从邮局寄给你的邻居了.<br /></p>
<img src ="http://www.blogjava.net/xixidabao/aggbug/41956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-04-19 16:55 <a href="http://www.blogjava.net/xixidabao/articles/41956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>70个JAVA问答(21--45)</title><link>http://www.blogjava.net/xixidabao/articles/41955.html</link><dc:creator>JAVA之路</dc:creator><author>JAVA之路</author><pubDate>Wed, 19 Apr 2006 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/xixidabao/articles/41955.html</guid><description><![CDATA[
		<p>70个JAVA问答</p>
		<p>21. 问：applet中如何获得键盘的输入<br />答：application的System.in是当前系统的标准输入,applet因为安全的原因不可能读取当前系统(客户端)的标准输入,只能从它的ROOT组件的事件中,比如键盘事件中取得键值.</p>
		<p> </p>
		<p>22. 问：怎样计算代码执行所花费的时间？<br />答：<br />代码开始取时间，结束后取时间，相减<br />long t1 = System.currentTimeMillis();<br />///////////////// your code<br />long t2 = System.currentTimeMillis() ;<br />long time = t2-t1;</p>
		<p> </p>
		<p>23. 问：如何获在程序中获得一个文件的ContentType？<br />答：<br />URL u = new URL("<a href="file:///aaa.txt">file:///aaa.txt</a>");<br />URLConnection uc = u.openConnection();<br />String s = uc.getContentType();</p>
		<p>
				<br />24. 问：连接池的使用是建立很多连接池，还是一个连接池里用多个连接？<br />答：<br />只有在对象源不同的情况下才会发生多个池化,如果你只连一结一个数据源,永远不要用多个连结池. 所以连结池的初始化一定要做成静态的,而且应该在构造对象之前,也就是只有在类LOAD的时候,别的时候不应该有任何生成新的连结池的时候。</p>
		<p>
				<br />25. 问：JavaMail要怎么安装？<br />答：下载两个包，一个是javamail包，另一个是jaf包。下载完直接把这两个包不解压加到CLASSPATH。</p>
		<p>
				<br />26. 问：怎样把地址栏里的地址锁定？<br />答：把你的服务器的可访问目录索引选项关闭就行了,任何服务器都有一个conf文件,里面都有这个选项。</p>
		<p>
				<br />27. 问：在JAVA中怎么取得环境变量啊。比如： TEMP = C：\TEMP ？<br />答：String sss = System.getProperty(key)</p>
		<p>
				<br />28. 问：怎样实现四舍五入，保留小数点后两位小数？<br />答：<br />import java.text.*;<br />...<br />NumberFormat nf=NumberFormat.getNumberInstance();<br />nf.setMaximumFractionDigits(2);<br />nf.setMinimumFractionDigits(2);<br />nf.format(numb);</p>
		<p>
				<br />29. 问：Applet和form如何通信？<br />答：<br />取得的参数传到param里面<br />&lt;% <br />String xxx = request.getParameter("xxx"); <br />%&gt; <br />&lt;applet&gt; <br />&lt;param value="&lt;%=xxx%&gt;"&gt; <br />&lt;/applet&gt;</p>
		<p> </p>
		<p>30. 问：java-plug-in是什么？<br />答：Java Runtime Environment的插件。用来运行java程序。不需要什么特别的设置。等于你的机器里面有了jvm。</p>
		<p>
				<br />31. 问：WEB上面怎么样连接上一个EXCEL表格？<br />答：<br />定义页面得contentType="application/vnd.ms-excel"，让页面以excel得形式打开。同样也可以以word得形式打开：application/msword。</p>
		<p>
				<br />32. 问：怎样才能避免textarea字数限制？<br />答：是使用了FORM的默认方法的缘故,如果什么也不写默认是GET改用Post即可，在Form中定义mothod="post"。</p>
		<p>
				<br />33. 问：为什么加了&lt;<a href="mailto:%@page">%@page</a> contentType="text/html;charset=gb2312" %&gt;插入数据库的中文，依然是乱码？<br />答：<br />这要从环境看,能显示说明你的JSP引擎没有问题,但写入数据库时你的JDBC能不能处理中文,同一公司不同版本的JDBC都有支持中文和不支持中文的情况,RESIN自带的MYSQL JDBC就不支持,MM的就支持,还有你的数据库类型是否支持中文?CHAR的一般支持,但是否用binary存储双字节码</p>
		<p>
				<br />34. 问：对于JFrame，hide()，show()与setVisibel()有什么区别吗？<br />答：<br />setVisible()从Component继承过来，而hide(),show()从Window里面继承过来。<br />Makes the Window visible. If the Window and/or its owner are not yet displa yable, both are made displayable. The Window will be validated prior to being made visible. If t he Window is already visible, this will bring the Window to the front. 区别在这。</p>
		<p>
				<br />36. 问：sendRedirect为什么不可以转到mms协议的地址的？response.sendRedirect("mms://missiah.adsldns.org:9394");<br />答：java平台目前实现的protocol中并没有mms,你可以取系统属性java.protocol.handler.pkgs看看它的值中有没有mms,所以如果要想重定向到mms://host这样和URL,只有生成客户端的JAVASCRIPT让它来重定向</p>
		<p>
				<br />37. 问：JTable中怎样定义各个Columns和Width和怎样设置表格的内容靠做靠右或居中？<br />答：<br />TableColumn tc = table.getColumn("Name");//取得列名为"Name"的列Handle<br />int currentWidth = tc.getPreferredWidth(); //取得该列当前的宽度<br />tc.setPreferredWidth(200); //设置当前列宽<br />tc.setMaxWidth(200); //设置该列最大宽度<br />tc.setMinWidth(50); //设置该列最小宽度</p>
		<p>
				<br />38. 问：批操作是否可用于select语句？<br />答：批操作其实是指成批理更新的操作,绝对不可能用于select操作。</p>
		<p>
				<br />39. 问：为什么jsp路径太深文件名太长就无法读取文件？<br />答：path不能超过255长度,不然就找不到了.这是作业系统的事。</p>
		<p>
				<br />40. 问：如何让页面不保留缓存？<br />答：<br />&lt;% <br />response.setHeader("Pragma","No-cache"); <br />response.setHeader("Cache-Control","no-cache"); <br />response.setDateHeader("Expires", 0); <br />%&gt;</p>
		<p>
				<br />41. 问：我的applet code 中用到jbutton 时就出错是否由于ie不支持swing package 请问应怎么办？<br />答：JBUTTON是SWING基本包啊,只要把jdk/jre/lib/rt.jar放在classpath就行了.不要加载任何别的库。</p>
		<p>
				<br />42. 问：不知道java是否支持midi格式，如果支持，应该怎么把wave格式转换成midi格式？<br />答：目前还不行,可以看一下JMF三个版中对MIDI的格式支持是read only,而WAVE是read/write,MIDI只能播放,不能生成。</p>
		<p>
				<br />43. 问：在jsp里面防止用户直接输入url进去页面，应该怎么做呢？<br />答：<br />一是从web服务器控制,对某一目录的所有访问要通过验证.<br />二是在要访问的页面中加入控制.这个一般用session,也可以用请求状态码实现</p>
		<p>
				<br />44. 问：<br />例如后台有一计算应用程序（此程序运算起来很慢，可持续几分钟到几小时，这不管，主要是能激活它），客户机讲任务提交后，服务器对任务进行检测无误后将向服务器后台程序发送信息，并将其激活。要求如下：<br />1）首先将后台程序激活，让它执行此任务（比如，前台将计算的C代码提交上后，后台程序程序能马上调用，并将其运行）<br />2）要在前台JSP页面中显示运行过程信息（由于运行时间长，希望让客户看到运行过程中产生的信息）如何完成？</p>
		<p>答：<br />活是可以的,运行一个shell让它去运行后台就行,但不可能取出运行信息,因为HTTP的超时限制不可能永远等你后台运行的,而且信息如果要动态实时推出来就得用SERVER PUSH技术。</p>
		<p> </p>
		<p>45. 问：数据库是datetime 型 ，插入当前时间到数据库？<br />答：<br />java.sql.Date sqlDate = new java.sql.Date();<br />PreparedStatement pstmt = conn.prepareStatement("insert into foo(time) values(?)");<br />pstmt.setDate(1,sqlDate);<br />pstmt.executeUpdate();</p>
		<p>
				<br />
				<br /> </p>
<img src ="http://www.blogjava.net/xixidabao/aggbug/41955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xixidabao/" target="_blank">JAVA之路</a> 2006-04-19 16:54 <a href="http://www.blogjava.net/xixidabao/articles/41955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>