﻿<?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-BeanSoft's Java Blog-随笔分类-Java Code Share</title><link>http://www.blogjava.net/beansoft/category/22785.html</link><description>MyEclipse 6, Java EE 5, JSPWiki, Spring, Struts, Hibernate, JPA, SWT, Swing, AJAX, JavaScript, Netbeans</description><language>zh-cn</language><lastBuildDate>Wed, 07 May 2008 13:35:26 GMT</lastBuildDate><pubDate>Wed, 07 May 2008 13:35:26 GMT</pubDate><ttl>60</ttl><item><title>SSL安全套接字服务器和客户端代码示例</title><link>http://www.blogjava.net/beansoft/archive/2008/05/07/199029.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Wed, 07 May 2008 09:47:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2008/05/07/199029.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/199029.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2008/05/07/199029.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/199029.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/199029.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SSL，大家都知道，只要是想搞用证书来实现数据加密传输的，都离不开它，例如HTTPS也是类似的实现，我提供的这个代码就是2004年时候学习SSL时的练习代码，带有详细说明，有需要的可以试试，毕竟我也现在也用不到这个代码，放在那里是浪费。&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2008/05/07/199029.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/199029.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2008-05-07 17:47 <a href="http://www.blogjava.net/beansoft/archive/2008/05/07/199029.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>免费 JSP/Servlet 中文教程打包下载</title><link>http://www.blogjava.net/beansoft/archive/2007/10/26/156063.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Fri, 26 Oct 2007 03:09:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/10/26/156063.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/156063.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/10/26/156063.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/156063.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/156063.html</trackback:ping><description><![CDATA[
		<p>JSPServlet中文教程.zip　7.69 MB 下载地址:</p>
		<p>
				<a title="http://cid-519b3f7aa2172030.skydrive.live.com/self.aspx/Public/JSPServlet中文教程.zip" href="http://cid-519b3f7aa2172030.skydrive.live.com/self.aspx/Public/JSPServlet中文教程.zip">http://cid-519b3f7aa2172030.skydrive.live.com/self.aspx/Public/JSPServlet中文教程.zip</a>
		</p>
		<p>下载速度不是太稳定, 下不了的话大家可以自己去官方网站下载, 地址在下面有介绍. 注意上面的地址是个网页, 不要用 FlashGet 之类的直接打开, 需要进去了才能再下.</p>
		<p>同学们分享的, 来自下面的网站: <a title="http://courses.coreservlets.com/Course-Materials/chinese.html" href="http://courses.coreservlets.com/Course-Materials/chinese.html">http://courses.coreservlets.com/Course-Materials/chinese.html</a> </p>
		<p>Free Servlet, JSP, and JDBC Training Material<br />From 2nd Edition of Core Servlets and JSP (Volume 1)<br />Chinese Version Translated by Zhao Xueliang </p>
		<p>您可以自己去下载. 我这里把 PDF 打包给大家来下载了.</p>
		<h3>Free Servlet, JSP, and JDBC Training Material</h3>
		<h3>From 2nd Edition of <i>Core Servlets and JSP</i> (Volume 1)</h3>
		<h4>Chinese Version Translated by Zhao Xueliang</h4>
		<p>This page gives Chinese (simplified script) translations of the slides from <a href="http://courses.coreservlets.com/csajsp2.html">Core Servlets and JSP, 2nd Edition</a>. Translation by Zhao Xueliang (<a href="mailto:Xueliang_Zhao@sonic.com">Xueliang_Zhao@sonic.com</a>). </p>
		<p>Slides and exercises from Marty Hall's world-renowned <a href="http://courses.coreservlets.com">live training courses</a> are now available online. The materials on this page are based on the second edition of Marty's book <i>Core Servlets and JavaServer Pages</i> and have been tested by Marty in live courses in the US, Canada, Australia, Puerto Rico, Japan, and the Philippines. See the <a href="http://courses.coreservlets.com/index.html">training materials home page</a> for slides based on <i>More Servlets and JavaServer Pages</i>, <i>Core Web Programming</i>, the first edition of <i>Core Servlets and JavaServer Pages</i>, and online tutorials and conference talks on servlets, JSP, JSTL, Apache Struts, and JSF. Materials in Japanese also available. </p>
		<p>To arrange a servlet &amp; JSP course at <i>your</i> organization based on these materials, again contact <a href="mailto:info@coreservlets.com">info@coreservlets.com</a>. These courses can be customized to use any combination of <a href="http://courses.coreservlets.com/index.html">materials</a>, and new materials can be added for specific client needs. They are available in any country, worldwide, but courses outside of N. American usually require more students to justify the travel costs. To learn more details about the instructor, the curriculum for the live training courses, or the public course schedule, please see <a href="http://courses.coreservlets.com">http://courses.coreservlets.com</a>. </p>
		<p>You can also <a href="http://volume1.coreservlets.com/">visit the book's home page</a>, <a href="http://www.moreservlets.com/">visit the home page of the sequel to this book</a> (<i><b>More</b> Servlets and JavaServer Pages</i>), or access <a href="http://pdf.coreservlets.com/">the free online version of the book's first edition</a>. </p>
		<h3>
				<a>Servlets &amp; JSP: Overview and Setup</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/01-Overview-and-Setup-Chinese.pdf">PDF of Servlets &amp; JSP: Overview and Setup in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/01-Overview-and-Setup-Chinese.ppt">PowerPoint of Servlets &amp; JSP: Overview and Setup in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<p>
				<b>More Info:</b>
				<a href="http://www.coreservlets.com/Apache-Tomcat-Tutorial/">Installation and Configuration Guide for Apache Tomcat 4 and 5</a>. </p>
		<h3>
				<a>Servlet Basics</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/02-Servlet-Basics-Chinese.pdf">PDF of Servlet Basics in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/02-Servlet-Basics-Chinese.ppt">PowerPoint of Servlet Basics in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<h3>
				<a>Handling the Client Request: Form Data</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/03-Form-Data-Chinese.pdf">PDF of Handling the Client Request: Form Data in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/03-Form-Data-Chinese.ppt">PowerPoint of Handling the Client Request: Form Data in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<h3>
				<a>Handling the Client Request: HTTP Request Headers</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/04-Request-Headers-Chinese.pdf">PDF of Handling the Client Request: HTTP Request Headers in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/04-Request-Headers-Chinese.ppt">PowerPoint of Handling the Client Request: HTTP Request Headers in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<h3>
				<a>Generating the Server Response: HTTP Status Codes</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/05-Status-Codes-Chinese.pdf">PDF of Generating the Server Response: HTTP Status Codes in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/05-Status-Codes-Chinese.ppt">PowerPoint of Generating the Server Response: HTTP Status Codes in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<h3>
				<a>Generating the Server Response: HTTP Response Headers</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/06-Response-Headers-Chinese.pdf">PDF of Generating the Server Response: HTTP Response Headers in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/06-Response-Headers-Chinese.ppt">PowerPoint of Generating the Server Response: HTTP Response Headers in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<h3>
				<a>Handling Cookies</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/07-Cookies-Chinese.pdf">PDF of Handling Cookies in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/07-Cookies-Chinese.ppt">PowerPoint of Handling Cookies in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<h3>
				<a>Session Tracking</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/08-Session-Tracking-Chinese.pdf">PDF of Session Tracking in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/08-Session-Tracking-Chinese.ppt">PowerPoint of Session Tracking in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<h3>
				<a>JSP Introduction &amp; Overview</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/09-JSP-Intro-Chinese.pdf">PDF of JSP Introduction &amp; Overview in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/09-JSP-Intro-Chinese.ppt">PowerPoint of JSP Introduction &amp; Overview in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<h3>
				<a>Invoking Java Code with JSP Scripting Elements</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/10-JSP-Scripting-Elements-Chinese.pdf">PDF of Invoking Java Code with JSP Scripting Elements in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/10-JSP-Scripting-Elements-Chinese.ppt">PowerPoint of Invoking Java Code with JSP Scripting Elements in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<h3>
				<a>Controlling the Structure of Generated Servlets: The JSP <code>page</code> Directive</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/11-page-Directive-Chinese.pdf">PDF of JSP <code>page</code> Directive in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/11-page-Directive-Chinese.ppt">PowerPoint of JSP <code>page</code> Directive in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<h3>
				<a>Including Files and Applets in JSP Pages</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/12-File-Inclusion-Chinese.pdf">PDF of Including Files and Applets in JSP Pages in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/12-File-Inclusion-Chinese.ppt">PowerPoint of Including Files and Applets in JSP Pages in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<h3>
				<a>Using JavaBeans Components in JSP Documents</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/13-JavaBeans-Chinese.pdf">PDF of Using JavaBeans Components in JSP Documents in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/13-JavaBeans-Chinese.ppt">PowerPoint of Using JavaBeans Components in JSP Documents in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<h3>
				<a>The Model View Controller (MVC) Architecture: Integrating Servlets and JSP</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/14-MVC-Chinese.pdf">PDF of MVC in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/14-MVC-Chinese.ppt">PowerPoint of MVC in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<h3>
				<a>JSP 2.0 Expression Language: Simplifying MVC &amp; Access to Java Code</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/chinese/15-Expression-Language-Chinese.pdf">PDF of JSP Expression Language in Chinese</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/chinese/15-Expression-Language-Chinese.ppt">PowerPoint of JSP Expression Language in Chinese</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<p>
				<b>More Info:</b>
				<a href="http://www.coreservlets.com/Apache-Struts-Tutorial/">Jakarta Struts Tutorial</a>. </p>
		<h3>
				<a>Creating Custom JSP Tag Libraries <small>(from first edition of book)</small></a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/csajsp1/Se12-Custom-Tags.pdf">PDF of Creating Custom JSP Tag Libraries <small>(from first edition of book)</small> in English</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/csajsp1/Se12-Custom-Tags.ppt">PowerPoint of Creating Custom JSP Tag Libraries <small>(from first edition of book)</small> in English</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<p>
				<b>More Info:</b> Chapter 14 of <a href="http://pdf.coreservlets.com/">the free online version of <i>Core Servlets &amp; JSP (1st Ed)</i></a>. </p>
		<h3>
				<a>Accessing Databases with JDBC <small>(from first edition of book)</small></a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/csajsp1/Se15-JDBC.pdf">PDF of Accessing Databases with JDBC <small>(from first edition of book)</small> in English</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/csajsp1/Se15-JDBC.ppt">PowerPoint of Accessing Databases with JDBC <small>(from first edition of book)</small> in English</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access. </p>
		<p>
				<b>More Info:</b> Chapter 18 of <a href="http://pdf.coreservlets.com/">the free online version of <i>Core Servlets &amp; JSP (1st Ed)</i></a>. </p>
		<h3>
				<a>Certification Exam Prep: Sun Certified Web Component Developer (SCWCD)</a>
		</h3>
		<p>View <a href="http://courses.coreservlets.com/pdf/msajsp/15-Web-Component-Certification.pdf">PDF of Certification Exam Prep: Sun Certified Web Component Developer (SCWCD) in English</a><br />Free for personal use. </p>
		<p>View <a href="http://courses.coreservlets.com/ppt/msajsp/15-Web-Component-Certification.ppt">PowerPoint of Certification Exam Prep: Sun Certified Web Component Developer (SCWCD) in English</a><br />For customization and projection by instructors. Password-protected; see <a href="http://courses.coreservlets.com/instructor-materials.html">usage rules</a> for access.</p>
<img src ="http://www.blogjava.net/beansoft/aggbug/156063.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-10-26 11:09 <a href="http://www.blogjava.net/beansoft/archive/2007/10/26/156063.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BeanSoft 的日志记录 Logger 类</title><link>http://www.blogjava.net/beansoft/archive/2007/09/22/147385.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sat, 22 Sep 2007 05:09:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/22/147385.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/147385.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/22/147385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/147385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/147385.html</trackback:ping><description><![CDATA[<p>这个类参考了 JBOSS 源码中的日志记录类, 通过修改配置文件就可以改变调试信息的输出级别. 为什么不用 LOG4J? LOG4J 功能是十分强大, 然而强大的代价就是库文件很大, 开源的 Tomcat 项目越来越庞大, 就是一个明证. 如果产品全部都适用开源方案, 那么后果就是本来很小的项目会庞大成为一个大象.</p> <p>两个文件解决日志记录:</p> <p>log.properties</p> <p># The log level configuration file of Logger.java<br># NONE&gt;FATAL&gt;ERROR&gt;WARN&gt;INFO&gt;DEBUG&gt;ALL<br>loglevel = ERROR</p> <p>Logger.java</p> <div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #008000">/*</span>
<span style="color: #008000"> * @(#)Logger 1.01 2005-4-9</span>
<span style="color: #008000"> *</span>
<span style="color: #008000"> * Copyright 2005 BeanSoft Studio. All rights reserved.</span>
<span style="color: #008000"> * PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.</span>
<span style="color: #008000"> */</span>

package studio.beansoft.util.logging;

import java.io.Serializable;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;

<span style="color: #008000">/**</span>
<span style="color: #008000"> * Logger, provides simple logging control function, only support log to console.</span>
<span style="color: #008000"> * Because log4j is too big(larger than 300 KB) to use, so i decide not use it.</span>
<span style="color: #008000"> * See static factory methods for details.</span>
<span style="color: #008000"> * You might to change the log.properties file for log levels.</span>
<span style="color: #008000"> * eg:</span>
<span style="color: #008000"> * Logger.getLogger().debug("This is a debug");</span>
<span style="color: #008000"> * studio.beansoft.util.logging.Logger.getLogger(this.getClass()).debug("something");</span>
<span style="color: #008000"> * </span>
<span style="color: #008000"> * The log level is:</span>
<span style="color: #008000"> * </span>
<span style="color: #008000"> * NONE&gt;FATAL&gt;ERROR&gt;WARN&gt;INFO&gt;DEBUG&gt;ALL</span>
<span style="color: #008000"> * </span>
<span style="color: #008000"> * </span>
<span style="color: #008000"> * @version 1.01</span>
<span style="color: #008000"> * @author BeanSoft</span>
<span style="color: #008000"> */</span>
<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Logger implements Serializable {
    <span style="color: #008000">/** The logger name. */</span>
    <span style="color: #0000ff">private</span> final String name;
    
    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Cached instances of allocated logger objects.</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> Map loggerInstances = <span style="color: #0000ff">new</span> TreeMap();
    
 <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> final <span style="color: #0000ff">int</span> NONE = 7;
 
    <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> final <span style="color: #0000ff">int</span> ALL = 1;

    <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> final <span style="color: #0000ff">int</span> FATAL = 6;

    <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> final <span style="color: #0000ff">int</span> ERROR = 5;

    <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> final <span style="color: #0000ff">int</span> WARN = 4;

    <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> final <span style="color: #0000ff">int</span> INFO = 3;

    <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> final <span style="color: #0000ff">int</span> DEBUG = 2;

 

    <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">int</span> logLevel = NONE;

    <span style="color: #008000">// Load log level from log.properties</span>
    <span style="color: #0000ff">static</span> {
        Properties props = <span style="color: #0000ff">new</span> Properties();
        <span style="color: #0000ff">try</span> {
            props.load(Logger.<span style="color: #0000ff">class</span>.getResourceAsStream(<span style="color: #006080">"log.properties"</span>));
            String levelStr = props.getProperty(<span style="color: #006080">"loglevel"</span>);

            <span style="color: #0000ff">if</span> (<span style="color: #006080">"ALL"</span>.equalsIgnoreCase(levelStr)) {
                logLevel = ALL;
            } <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> (<span style="color: #006080">"ERROR"</span>.equalsIgnoreCase(levelStr)) {
                logLevel = ERROR;
            } <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> (<span style="color: #006080">"WARN"</span>.equalsIgnoreCase(levelStr)) {
                logLevel = WARN;
            } <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> (<span style="color: #006080">"INFO"</span>.equalsIgnoreCase(levelStr)) {
                logLevel = INFO;
            } <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> (<span style="color: #006080">"DEBUG"</span>.equalsIgnoreCase(levelStr)) {
                logLevel = DEBUG;
            } <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> (<span style="color: #006080">"NONE"</span>.equalsIgnoreCase(levelStr)) {
                logLevel = NONE;
            } <span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span> (<span style="color: #006080">"FATAL"</span>.equalsIgnoreCase(levelStr)) {
                logLevel = FATAL;
            }
            
        } <span style="color: #0000ff">catch</span> (Exception e) {
            e.printStackTrace();
        }
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Creates new Logger the given logger name.</span>
<span style="color: #008000">     * </span>
<span style="color: #008000">     * @param name</span>
<span style="color: #008000">     *            the logger name.</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">protected</span> Logger(final String name) {
        <span style="color: #0000ff">this</span>.name = name;
        <span style="color: #008000">//this.loggerDelegate = getDelegatePlugin(name);</span>
    }
    
    <span style="color: #0000ff">private</span> String formatCurrentDate() {
        DateFormat formatter = <span style="color: #0000ff">new</span> SimpleDateFormat(<span style="color: #006080">"yyyy-MM-dd HH:mm:ss.SSS"</span>);
        <span style="color: #0000ff">return</span> formatter.format(<span style="color: #0000ff">new</span> Date());
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Added by BeanSoft.</span>
<span style="color: #008000">     * </span>
<span style="color: #008000">     * @return the log level of this class</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">int</span> getLogLevel() {
        <span style="color: #0000ff">return</span> logLevel;
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Return the name of this logger.</span>
<span style="color: #008000">     * </span>
<span style="color: #008000">     * @return The name of this logger.</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> String getName() {
        <span style="color: #0000ff">return</span> name;
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Check to see if the DEBUG level is enabled for this logger.</span>
<span style="color: #008000">     * </span>
<span style="color: #008000">     * @return true if a {@link #debug(Object)}method invocation would pass the</span>
<span style="color: #008000">     *         msg to the configured appenders, false otherwise.</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> boolean isDebugEnabled() {
        <span style="color: #0000ff">return</span> getLogLevel() &gt;= DEBUG;
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Issue a log msg with a level of DEBUG. Invokes log.log(Level.DEBUG,</span>
<span style="color: #008000">     * message);</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> debug(Object message) {
        <span style="color: #0000ff">if</span> (getLogLevel() &lt;= DEBUG) {
            System.<span style="color: #0000ff">out</span>.println(formatCurrentDate() + <span style="color: #006080">" "</span> + getName() + <span style="color: #006080">":debug:"</span> + message);
        }
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Issue a log msg and throwable with a level of DEBUG. Invokes</span>
<span style="color: #008000">     * log.log(Level.DEBUG, message, t);</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> debug(Object message, Throwable t) {
        <span style="color: #0000ff">if</span> (getLogLevel() &lt;= DEBUG) {
            System.<span style="color: #0000ff">out</span>.println(formatCurrentDate() + <span style="color: #006080">" "</span> + getName() + <span style="color: #006080">":"</span> + <span style="color: #006080">"debug:"</span> + message);
            t.printStackTrace();
        }
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Check to see if the INFO level is enabled for this logger.</span>
<span style="color: #008000">     * </span>
<span style="color: #008000">     * @return true if a {@link #info(Object)}method invocation would pass the</span>
<span style="color: #008000">     *         msg to the configured appenders, false otherwise.</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> boolean isInfoEnabled() {
        <span style="color: #0000ff">return</span> getLogLevel() &lt;= INFO;
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Issue a log msg with a level of INFO. Invokes log.log(Level.INFO,</span>
<span style="color: #008000">     * message);</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> info(Object message) {
        <span style="color: #0000ff">if</span> (getLogLevel() &lt;= INFO) {
            System.<span style="color: #0000ff">out</span>.println(formatCurrentDate() + <span style="color: #006080">" "</span> + getName() + <span style="color: #006080">":"</span> + <span style="color: #006080">"info:"</span> + message);
        }
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Issue a log msg and throwable with a level of INFO. Invokes</span>
<span style="color: #008000">     * log.log(Level.INFO, message, t);</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> info(Object message, Throwable t) {
        <span style="color: #0000ff">if</span> (getLogLevel() &lt;= INFO) {
            System.<span style="color: #0000ff">out</span>.println(formatCurrentDate() + <span style="color: #006080">" "</span> + getName() + <span style="color: #006080">":"</span> + <span style="color: #006080">"info:"</span> + message);
         t.printStackTrace();
        }
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Issue a log msg with a level of WARN. Invokes log.log(Level.WARN,</span>
<span style="color: #008000">     * message);</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> warn(Object message) {
        <span style="color: #0000ff">if</span> (getLogLevel() &lt;= WARN) {
            System.<span style="color: #0000ff">out</span>.println(formatCurrentDate() + <span style="color: #006080">" "</span> + getName() + <span style="color: #006080">":"</span> + <span style="color: #006080">"warn:"</span> + message);
        }
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Issue a log msg and throwable with a level of WARN. Invokes</span>
<span style="color: #008000">     * log.log(Level.WARN, message, t);</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> warn(Object message, Throwable t) {
        <span style="color: #0000ff">if</span> (getLogLevel() &lt;= WARN) {
         System.<span style="color: #0000ff">out</span>.println(formatCurrentDate() + <span style="color: #006080">" "</span> + getName() + <span style="color: #006080">":"</span> + <span style="color: #006080">"warn:"</span> + message);
         t.printStackTrace();
        }
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Issue a log msg with a level of ERROR. Invokes log.log(Level.ERROR,</span>
<span style="color: #008000">     * message);</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> error(Object message) {
        <span style="color: #0000ff">if</span> (getLogLevel() &lt;= ERROR) {
            System.err.println(formatCurrentDate() + <span style="color: #006080">" "</span> + getName() + <span style="color: #006080">":"</span> + <span style="color: #006080">"error:"</span> + message);
        }
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Issue a log msg and throwable with a level of ERROR. Invokes</span>
<span style="color: #008000">     * log.log(Level.ERROR, message, t);</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> error(Object message, Throwable t) {
        <span style="color: #0000ff">if</span> (getLogLevel() &lt;= ERROR) {
            System.err.println(formatCurrentDate() + <span style="color: #006080">" "</span> + getName() + <span style="color: #006080">":"</span> + <span style="color: #006080">"error:"</span> + message);
            t.printStackTrace(System.err);
        }
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Issue a log msg with a level of FATAL. Invokes log.log(Level.FATAL,</span>
<span style="color: #008000">     * message);</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> fatal(Object message) {
        <span style="color: #0000ff">if</span> (getLogLevel() &lt;= FATAL) {
            System.err.println(formatCurrentDate() + <span style="color: #006080">" "</span> + getName() + <span style="color: #006080">":"</span> + <span style="color: #006080">"fatal error:"</span> + message);
        }        
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Issue a log msg and throwable with a level of FATAL. Invokes</span>
<span style="color: #008000">     * log.log(Level.FATAL, message, t);</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> fatal(Object message, Throwable t) {
        <span style="color: #0000ff">if</span> (getLogLevel() &lt;= FATAL) {
            System.err.println(formatCurrentDate() + <span style="color: #006080">" "</span> + getName() + <span style="color: #006080">":"</span> + <span style="color: #006080">"fatal error:"</span> + message);
            t.printStackTrace(System.err);
        }
    }

    <span style="color: #008000">/////////////////////////////////////////////////////////////////////////</span>
    <span style="color: #008000">//                            Factory Methods</span>
    <span style="color: #008000">/////////////////////////////////////////////////////////////////////////</span>
    
    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Create a anonymous Logger instance.</span>
<span style="color: #008000">     * Date: 2005-04-09</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> Logger getAnonymousLogger() {
        <span style="color: #0000ff">return</span> getLogger(<span style="color: #006080">""</span>);
    }
    
    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Create a Logger instance given the logger name from cached instances.</span>
<span style="color: #008000">     * </span>
<span style="color: #008000">     * @param name</span>
<span style="color: #008000">     *            the logger name</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> Logger getLogger(String name) {
        Logger instance = (Logger) loggerInstances.get(name);
        
        <span style="color: #0000ff">if</span>(instance == <span style="color: #0000ff">null</span>) {
            instance = <span style="color: #0000ff">new</span> Logger(name);
<span style="color: #008000">//            System.out.println(formatCurrentDate() + " " + instance + " not found, so create it!");</span>
            loggerInstances.put(name, instance);
        }
        <span style="color: #0000ff">return</span> instance;
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Create a Logger instance given the logger name with the given suffix.</span>
<span style="color: #008000">     * </span>
<span style="color: #008000">     * &lt;p&gt;</span>
<span style="color: #008000">     * This will include a logger seperator between classname and suffix</span>
<span style="color: #008000">     * </span>
<span style="color: #008000">     * @param name</span>
<span style="color: #008000">     *            The logger name</span>
<span style="color: #008000">     * @param suffix</span>
<span style="color: #008000">     *            A suffix to append to the classname.</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> Logger getLogger(String name, String suffix) {
        <span style="color: #0000ff">return</span> getLogger(name + <span style="color: #006080">"."</span> + suffix);
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Create a Logger instance given the logger class. This simply calls</span>
<span style="color: #008000">     * create(clazz.getName()).</span>
<span style="color: #008000">     * </span>
<span style="color: #008000">     * @param clazz</span>
<span style="color: #008000">     *            the Class whose name will be used as the logger name</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> Logger getLogger(Class clazz) {
        <span style="color: #0000ff">return</span> getLogger(clazz.getName());
    }

    <span style="color: #008000">/**</span>
<span style="color: #008000">     * Create a Logger instance given the logger class with the given suffix.</span>
<span style="color: #008000">     * </span>
<span style="color: #008000">     * &lt;p&gt;</span>
<span style="color: #008000">     * This will include a logger seperator between classname and suffix</span>
<span style="color: #008000">     * </span>
<span style="color: #008000">     * @param clazz</span>
<span style="color: #008000">     *            The Class whose name will be used as the logger name.</span>
<span style="color: #008000">     * @param suffix</span>
<span style="color: #008000">     *            A suffix to append to the classname.</span>
<span style="color: #008000">     */</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> Logger getLogger(Class clazz, String suffix) {
        <span style="color: #0000ff">return</span> getLogger(clazz.getName() + <span style="color: #006080">"."</span> + suffix);
    }
    
    <span style="color: #0000ff">public</span> String toString() {
        <span style="color: #0000ff">return</span> getClass().getName() + <span style="color: #006080">"["</span> + getName() + <span style="color: #006080">"]"</span>;        
    }
    
    
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main(String[] args) {
        Logger.getLogger(<span style="color: #006080">"test"</span>).fatal(<span style="color: #006080">"fatal"</span>);
  Logger.getLogger(<span style="color: #006080">"test"</span>).error(<span style="color: #006080">"error"</span>);
  Logger.getLogger(<span style="color: #006080">"test"</span>).debug(<span style="color: #006080">"debug"</span>);
    }

}
</pre></div><img src ="http://www.blogjava.net/beansoft/aggbug/147385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-22 13:09 <a href="http://www.blogjava.net/beansoft/archive/2007/09/22/147385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ObjectPool 对象池程序</title><link>http://www.blogjava.net/beansoft/archive/2007/09/22/147384.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sat, 22 Sep 2007 05:07:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/22/147384.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/147384.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/22/147384.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/147384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/147384.html</trackback:ping><description><![CDATA[<p>这就是传说中的对象池, 位于 JDK 的源代码中. 原始包名忘了, 反正是修改自 JDK 源码. 用法就不多说了, 看看函数名都能想的出来. 测试结果好像是要比来回 NEW 对象好的多.</p> <div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">import java.util.Vector;


<span style="color: #008000">/**</span>
<span style="color: #008000"> * &lt;meta name="usage" content="internal"/&gt;</span>
<span style="color: #008000"> * Pool of object of a given type to pick from to help memory usage</span>
<span style="color: #008000"> */</span>
<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> ObjectPool implements java.io.Serializable
{

  <span style="color: #008000">/** Type of objects in this pool.</span>
<span style="color: #008000">   *  @serial          */</span>
  <span style="color: #0000ff">private</span> final Class objectType;

  <span style="color: #008000">/** Vector of given objects this points to.</span>
<span style="color: #008000">   *  @serial          */</span>
  <span style="color: #0000ff">private</span> final Vector freeStack;

  <span style="color: #008000">/**</span>
<span style="color: #008000">   * Constructor ObjectPool</span>
<span style="color: #008000">   *</span>
<span style="color: #008000">   * @param type Type of objects for this pool</span>
<span style="color: #008000">   */</span>
  <span style="color: #0000ff">public</span> ObjectPool(Class type)
  {
    objectType = type;
    freeStack = <span style="color: #0000ff">new</span> Vector();
  }

  <span style="color: #008000">/**</span>
<span style="color: #008000">   * Constructor ObjectPool</span>
<span style="color: #008000">   *</span>
<span style="color: #008000">   * @param className Fully qualified name of the type of objects for this pool.</span>
<span style="color: #008000">   */</span>
  <span style="color: #0000ff">public</span> ObjectPool(String className)
  {
    <span style="color: #0000ff">try</span>
    {
      objectType = Class.forName(className);
    }
    <span style="color: #0000ff">catch</span>(ClassNotFoundException cnfe)
    {
      <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> RuntimeException(cnfe);
    }
    freeStack = <span style="color: #0000ff">new</span> Vector();
  }


  <span style="color: #008000">/**</span>
<span style="color: #008000">   * Constructor ObjectPool</span>
<span style="color: #008000">   *</span>
<span style="color: #008000">   *</span>
<span style="color: #008000">   * @param type Type of objects for this pool</span>
<span style="color: #008000">   * @param size Size of vector to allocate</span>
<span style="color: #008000">   */</span>
  <span style="color: #0000ff">public</span> ObjectPool(Class type, <span style="color: #0000ff">int</span> size)
  {
    objectType = type;
    freeStack = <span style="color: #0000ff">new</span> Vector(size);
  }

  <span style="color: #008000">/**</span>
<span style="color: #008000">   * Constructor ObjectPool</span>
<span style="color: #008000">   *</span>
<span style="color: #008000">   */</span>
  <span style="color: #0000ff">public</span> ObjectPool()
  {
    objectType = <span style="color: #0000ff">null</span>;
    freeStack = <span style="color: #0000ff">new</span> Vector();
  }

  <span style="color: #008000">/**</span>
<span style="color: #008000">   * Get an instance of the given object in this pool if available</span>
<span style="color: #008000">   *</span>
<span style="color: #008000">   *</span>
<span style="color: #008000">   * @return an instance of the given object if available or null</span>
<span style="color: #008000">   */</span>
  <span style="color: #0000ff">public</span> synchronized Object getInstanceIfFree()
  {

    <span style="color: #008000">// Check if the pool is empty.</span>
    <span style="color: #0000ff">if</span> (!freeStack.isEmpty())
    {

      <span style="color: #008000">// Remove object from end of free pool.</span>
      Object result = freeStack.lastElement();

      freeStack.setSize(freeStack.size() - 1);

      <span style="color: #0000ff">return</span> result;
    }

    <span style="color: #0000ff">return</span> <span style="color: #0000ff">null</span>;
  }

  <span style="color: #008000">/**</span>
<span style="color: #008000">   * Get an instance of the given object in this pool</span>
<span style="color: #008000">   *</span>
<span style="color: #008000">   *</span>
<span style="color: #008000">   * @return An instance of the given object</span>
<span style="color: #008000">   */</span>
  <span style="color: #0000ff">public</span> synchronized Object getInstance()
  {
 
    <span style="color: #008000">// Check if the pool is empty.</span>
    <span style="color: #0000ff">if</span> (freeStack.isEmpty())
    {

      <span style="color: #008000">// Create a new object if so.</span>
      <span style="color: #0000ff">try</span>
      {
        <span style="color: #0000ff">return</span> objectType.newInstance();
      }
      <span style="color: #0000ff">catch</span> (InstantiationException ex){}
      <span style="color: #0000ff">catch</span> (IllegalAccessException ex){}

      <span style="color: #008000">// Throw unchecked exception for error in pool configuration.</span>
      <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> RuntimeException(<span style="color: #006080">"exception creating new instance for pool"</span>, <span style="color: #0000ff">null</span>); <span style="color: #008000">//"exception creating new instance for pool");</span>
    }
    <span style="color: #0000ff">else</span>
    {

      <span style="color: #008000">// Remove object from end of free pool.</span>
      Object result = freeStack.lastElement();

      freeStack.setSize(freeStack.size() - 1);

      <span style="color: #0000ff">return</span> result;
    }
  }

  <span style="color: #008000">/**</span>
<span style="color: #008000">   * Add an instance of the given object to the pool</span>
<span style="color: #008000">   *</span>
<span style="color: #008000">   *</span>
<span style="color: #008000">   * @param obj Object to add.</span>
<span style="color: #008000">   */</span>
  <span style="color: #0000ff">public</span> synchronized <span style="color: #0000ff">void</span> freeInstance(Object obj)
  {

    <span style="color: #008000">// Make sure the object is of the correct type.</span>
    <span style="color: #008000">// Remove safety.  -sb</span>
    <span style="color: #008000">// if (objectType.isInstance(obj))</span>
    <span style="color: #008000">// {</span>
    freeStack.addElement(obj);
    <span style="color: #008000">// }</span>
    <span style="color: #008000">// else</span>
    <span style="color: #008000">// {</span>
    <span style="color: #008000">//  throw new IllegalArgumentException("argument type invalid for pool");</span>
    <span style="color: #008000">// }</span>
  }
}
</pre></div><img src ="http://www.blogjava.net/beansoft/aggbug/147384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-22 13:07 <a href="http://www.blogjava.net/beansoft/archive/2007/09/22/147384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>可以提供多个对象池自动生成, 管理的 ObjectPoolManager</title><link>http://www.blogjava.net/beansoft/archive/2007/09/22/147383.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Sat, 22 Sep 2007 05:06:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/22/147383.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/147383.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/22/147383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/147383.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/147383.html</trackback:ping><description><![CDATA[<p>昨天提到的技巧中只能对单个类别的对象进行生成和释放到对象池中, 今天介绍的这个类可以有效的管理多种类别的对象的自动生成和释放.</p> <p>&nbsp;</p> <div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"><span style="color: #008000">/*</span>
<span style="color: #008000"> * @(#)ObjectPoolManager.java 1.00 2005-5-1</span>
<span style="color: #008000"> *</span>
<span style="color: #008000"> * Copyright 2005 BeanSoft Studio. All rights reserved.</span>
<span style="color: #008000"> * PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.</span>
<span style="color: #008000"> */</span>
import java.util.HashMap;

import beanchat.entity.User;

import studio.beansoft.util.ObjectPool;
import studio.beansoft.util.logging.Logger;

<span style="color: #008000">/**</span>
<span style="color: #008000"> * ObjectPoolManager, dynamic manage pooled objects' create and release.</span>
<span style="color: #008000"> * </span>
<span style="color: #008000"> * @author BeanSoft</span>
<span style="color: #008000"> * @version 1.00 2005-5-1</span>
<span style="color: #008000"> */</span>
<span style="color: #0000ff">public</span> final <span style="color: #0000ff">class</span> ObjectPoolManager {

 <span style="color: #0000ff">static</span> Logger logger = studio.beansoft.util.logging.Logger.getLogger(ObjectPoolManager.<span style="color: #0000ff">class</span>);
 <span style="color: #008000">/**</span>
<span style="color: #008000">  * Holds instances of ObjectPool, the main key is the type of objects in this pool. </span>
<span style="color: #008000">  */</span>
 <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> HashMap objectPools = <span style="color: #0000ff">new</span> HashMap();
 
 <span style="color: #008000">/**</span>
<span style="color: #008000">  * This class is not instanceable.</span>
<span style="color: #008000">  */</span>
 <span style="color: #0000ff">private</span> ObjectPoolManager() {
 }
 
 <span style="color: #008000">/**</span>
<span style="color: #008000">  * Get a ObjectPool instance from the objectPools, if not found, then lazilly </span>
<span style="color: #008000">  * create a new one.</span>
<span style="color: #008000">  * @param clazz the object type</span>
<span style="color: #008000">  * @return the ObjectPool instance</span>
<span style="color: #008000">  */</span>
 <span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> ObjectPool getPool(Class clazz) {
     ObjectPool pool = (ObjectPool)objectPools.get(clazz);
     
     <span style="color: #0000ff">if</span>(pool == <span style="color: #0000ff">null</span>) {
         pool = <span style="color: #0000ff">new</span> ObjectPool(clazz);
         objectPools.put(clazz, pool);
     }
     
     <span style="color: #0000ff">return</span> pool;
 }
 
 <span style="color: #008000">/**</span>
<span style="color: #008000">  * Get an instance of the given object in the corresponding object pool.</span>
<span style="color: #008000">  * @param clazz the object type</span>
<span style="color: #008000">  * @return the instance of the object type</span>
<span style="color: #008000">  */</span>
 <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> Object getInstance(Class clazz) {
  logger.debug(<span style="color: #006080">"getObject("</span> + clazz + <span style="color: #006080">")"</span>);
  
  <span style="color: #0000ff">return</span> getPool(clazz).getInstance();
 }
 
 <span style="color: #008000">/**</span>
<span style="color: #008000">  * Free the instance to the corresponding object pool.</span>
<span style="color: #008000">  * @param obj the object to be freeed</span>
<span style="color: #008000">  */</span>
 <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> freeInstance(Object obj) {
  logger.debug(<span style="color: #006080">"Free object to pool"</span> + obj);
  
  getPool(obj.getClass()).freeInstance(obj);
 }
 
 <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main(String[] args) {
     User user = (User)(ObjectPoolManager.getInstance(User.<span style="color: #0000ff">class</span>));
     user.setUserName(<span style="color: #006080">"Hello"</span>);
     ObjectPoolManager.freeInstance(user);
     user = (User)(ObjectPoolManager.getInstance(User.<span style="color: #0000ff">class</span>));
     
     System.<span style="color: #0000ff">out</span>.println(user);
 }
}
</pre></div><img src ="http://www.blogjava.net/beansoft/aggbug/147383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-22 13:06 <a href="http://www.blogjava.net/beansoft/archive/2007/09/22/147383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于 UDP 的局域网多播聊天练习代码</title><link>http://www.blogjava.net/beansoft/archive/2007/09/18/146178.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Tue, 18 Sep 2007 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/09/18/146178.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/146178.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/09/18/146178.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/146178.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/146178.html</trackback:ping><description><![CDATA[<p>源码: <img src="http://bbs.tarena.com.cn/non-cgi/icon/zip.gif" width="16" border="0">&nbsp;<a title="http://download.gro.clinux.org/beansoft/JSmooth_0.9.9-7_zh_CN.zip" href="http://download.gro.clinux.org/beansoft/UDPChat.zip">http://download.gro.clinux.org/beansoft/UDPChat.zip</a>&nbsp;11.2 KB<br>&nbsp;</p> <p>基于 UDP 的局域网多播聊天练习代码<br>by 刘长炯 (BeanSoft@126.com)<br>编写日期: 2002-04-27<br>编译: javac *.java<br>运行: java UDPChat<br>或者<br>javaw UDPChat<br>打开两个以上的窗口来进行聊天, 即连续运行两次即可.<br>Windows 下可以点击 编译.bat 和 运行.bat 来编译, 运行.<br>项目代码也可以导入 Eclipse 运行.<br>也是刚学 Java 时候做的小练习.<br>截屏:<br><img height="543" src="http://www.blogjava.net/images/blogjava_net/beansoft/23599/o_UDPChat.png" width="671"></p> <p>项目文件在附件, 也可以直接抄下面的代码: <div><pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">import java.awt.*;
import java.io.*;
import java.net.*;
import java.awt.<span style="color: #0000ff">event</span>.*;

<span style="color: #008000">/**</span>
<span style="color: #008000"> * The multicast datagram socket class is useful for sending</span>
<span style="color: #008000"> * and receiving IP multicast packets.  A MulticastSocket is</span>
<span style="color: #008000"> * a (UDP) DatagramSocket, with additional capabilities for</span>
<span style="color: #008000"> * joining "groups" of other multicast hosts on the internet.</span>
<span style="color: #008000"> * &lt;P&gt;</span>
<span style="color: #008000"> * A multicast group is specified by a class D IP address, those</span>
<span style="color: #008000"> * in the range &lt;CODE&gt;224.0.0.1&lt;/CODE&gt; to &lt;CODE&gt;239.255.255.255&lt;/CODE&gt;,</span>
<span style="color: #008000"> * inclusive, and by a standard UDP port number.  One would join a</span>
<span style="color: #008000"> * multicast group by first creating a MulticastSocket with the desired</span>
<span style="color: #008000"> * port, then invoking the &lt;CODE&gt;joinGroup(InetAddress groupAddr)&lt;/CODE&gt;</span>
<span style="color: #008000"> * method:</span>
<span style="color: #008000"> * &lt;PRE&gt;</span>
<span style="color: #008000"> * // join a Multicast group and send the group salutations</span>
<span style="color: #008000"> * ...</span>
<span style="color: #008000"> * byte[] msg = {'H', 'e', 'l', 'l', 'o'};</span>
<span style="color: #008000"> * InetAddress group = InetAddress.getByName("228.5.6.7");</span>
<span style="color: #008000"> * MulticastSocket s = new MulticastSocket(6789);</span>
<span style="color: #008000"> * s.joinGroup(group);</span>
<span style="color: #008000"> * DatagramPacket hi = new DatagramPacket(msg, msg.length,</span>
<span style="color: #008000"> *                             group, 6789);</span>
<span style="color: #008000"> * s.send(hi);</span>
<span style="color: #008000"> * // get their responses!</span>
<span style="color: #008000"> * byte[] buf = new byte[1000];</span>
<span style="color: #008000"> * DatagramPacket recv = new DatagramPacket(buf, buf.length);</span>
<span style="color: #008000"> * s.receive(recv);</span>
<span style="color: #008000"> * ...</span>
<span style="color: #008000"> * // OK, I'm done talking - leave the group...</span>
<span style="color: #008000"> * s.leaveGroup(group);</span>
<span style="color: #008000"> * &lt;/PRE&gt;</span>
<span style="color: #008000"> *</span>
<span style="color: #008000"> * When one sends a message to a multicast group, &lt;B&gt;all&lt;/B&gt; subscribing</span>
<span style="color: #008000"> * recipients to that host and port receive the message (within the</span>
<span style="color: #008000"> * time-to-live range of the packet, see below).  The socket needn't</span>
<span style="color: #008000"> * be a member of the multicast group to send messages to it.</span>
<span style="color: #008000"> * &lt;P&gt;</span>
<span style="color: #008000"> * When a socket subscribes to a multicast group/port, it receives</span>
<span style="color: #008000"> * datagrams sent by other hosts to the group/port, as do all other</span>
<span style="color: #008000"> * members of the group and port.  A socket relinquishes membership</span>
<span style="color: #008000"> * in a group by the leaveGroup(InetAddress addr) method.  &lt;B&gt;</span>
<span style="color: #008000"> * Multiple MulticastSocket's&lt;/B&gt; may subscribe to a multicast group</span>
<span style="color: #008000"> * and port concurrently, and they will all receive group datagrams.</span>
<span style="color: #008000"> * &lt;P&gt;</span>
<span style="color: #008000"> * Currently applets are not allowed to use multicast sockets.</span>
<span style="color: #008000"> */</span>

<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> UDPChat extends Frame {
  InetAddress group = <span style="color: #0000ff">null</span>;
  MulticastSocket socket = <span style="color: #0000ff">null</span>;
  String username;
  <span style="color: #0000ff">int</span> port;

  TextArea textArea = <span style="color: #0000ff">new</span> TextArea();
  Panel configPanel = <span style="color: #0000ff">new</span> Panel();
  Label ipLabel = <span style="color: #0000ff">new</span> Label();
  TextField ipField = <span style="color: #0000ff">new</span> TextField(10);
  Label portLabel = <span style="color: #0000ff">new</span> Label();
  TextField portField = <span style="color: #0000ff">new</span> TextField(10);
  Label nameLabel = <span style="color: #0000ff">new</span> Label();
  TextField nameField = <span style="color: #0000ff">new</span> TextField(10);
  Panel messagePanel = <span style="color: #0000ff">new</span> Panel();
  Button joinButton = <span style="color: #0000ff">new</span> Button();
  Button leaveButton = <span style="color: #0000ff">new</span> Button();
  TextField messageField = <span style="color: #0000ff">new</span> TextField(80);
  Button sendButton = <span style="color: #0000ff">new</span> Button();
  Button emptyButton = <span style="color: #0000ff">new</span> Button();

  <span style="color: #0000ff">public</span> UDPChat() {
    <span style="color: #0000ff">try</span>  {
      jbInit();
      leaveButton.setEnabled(<span style="color: #0000ff">false</span>);
      sendButton.setEnabled(<span style="color: #0000ff">false</span>);
      textArea.setEditable(<span style="color: #0000ff">false</span>);
      pack();
      show();
    }
    <span style="color: #0000ff">catch</span>(Exception e) {
      e.printStackTrace();
    }
  }

  <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main(String[] args) {
    UDPChat uDPChat = <span style="color: #0000ff">new</span> UDPChat();
  }

  <span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> jbInit() throws Exception {
    <span style="color: #0000ff">this</span>.setTitle(<span style="color: #006080">"多点传送数据报聊天程序 - IP地址范围: 224.0.0.1 ~ 239.255.255.255"</span>);
    <span style="color: #0000ff">this</span>.addWindowListener(<span style="color: #0000ff">new</span> java.awt.<span style="color: #0000ff">event</span>.WindowAdapter() {

      <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> windowClosing(WindowEvent e) {
        this_windowClosing(e);
      }
    });
    ipLabel.setText(<span style="color: #006080">"IP:"</span>);
    ipField.setText(<span style="color: #006080">"225.0.0.1"</span>);
    portLabel.setText(<span style="color: #006080">"端口:"</span>);
    portField.setText(<span style="color: #006080">"4000"</span>);
    nameLabel.setText(<span style="color: #006080">"用户名:"</span>);
    nameField.setText(<span style="color: #006080">"匿名"</span>);
    joinButton.setForeground(Color.blue);
    joinButton.setLabel(<span style="color: #006080">"进入"</span>);
    joinButton.addActionListener(<span style="color: #0000ff">new</span> java.awt.<span style="color: #0000ff">event</span>.ActionListener() {
      <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> actionPerformed(ActionEvent e) {
        join();
      }
    });
    leaveButton.setForeground(Color.red);
    leaveButton.setLabel(<span style="color: #006080">"离开"</span>);
    leaveButton.addActionListener(<span style="color: #0000ff">new</span> java.awt.<span style="color: #0000ff">event</span>.ActionListener() {
      <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> actionPerformed(ActionEvent e) {
        leave();
      }
    });
    messageField.setText(<span style="color: #006080">"这里输入要发送的文字"</span>);
    messageField.addActionListener(<span style="color: #0000ff">new</span> java.awt.<span style="color: #0000ff">event</span>.ActionListener() {
       <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> actionPerformed(ActionEvent e) {
        send();
      }
    });
    sendButton.setLabel(<span style="color: #006080">"    发送    "</span>);
    sendButton.addActionListener(<span style="color: #0000ff">new</span> java.awt.<span style="color: #0000ff">event</span>.ActionListener() {
      <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> actionPerformed(ActionEvent e) {
        send();
      }
    });
    emptyButton.setLabel(<span style="color: #006080">"清空记录"</span>);
    emptyButton.addActionListener(<span style="color: #0000ff">new</span> java.awt.<span style="color: #0000ff">event</span>.ActionListener() {

      <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> actionPerformed(ActionEvent e) {
        emptyButton_actionPerformed(e);
      }
    });
    <span style="color: #0000ff">this</span>.add(configPanel, BorderLayout.NORTH);
    configPanel.add(ipLabel);
    configPanel.add(ipField);
    configPanel.add(portLabel);
    configPanel.add(portField);
    configPanel.add(nameLabel);
    configPanel.add(nameField);
    <span style="color: #0000ff">this</span>.add(messagePanel, BorderLayout.SOUTH);
    messagePanel.add(messageField);
    messagePanel.add(sendButton);

    <span style="color: #0000ff">this</span>.add(textArea, BorderLayout.CENTER);
    Panel p = <span style="color: #0000ff">new</span> Panel();
    p.setLayout(<span style="color: #0000ff">new</span> GridBagLayout());
    GridBagConstraints c = <span style="color: #0000ff">new</span> GridBagConstraints();
    c.weightx = c.weighty = 1;c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0; c.gridy = 0;
    p.add(joinButton, c);
    c.gridy ++;
    p.add(leaveButton, c);
    c.gridy ++;
    p.add(emptyButton, c);
    <span style="color: #0000ff">this</span>.add(p, BorderLayout.WEST);
  }

  <span style="color: #0000ff">void</span> join() {
    username = nameField.getText();
    <span style="color: #0000ff">if</span>(username.equals(<span style="color: #006080">""</span>)) {
      textArea.append(<span style="color: #006080">"请你务必首先输入一个名字.\n"</span>);
      <span style="color: #0000ff">return</span>;
    }
    <span style="color: #0000ff">try</span> {
      textArea.append(<span style="color: #006080">"尝试进入聊天室...\n"</span>);
      group = InetAddress.getByName(ipField.getText());
      port = Integer.parseInt(portField.getText());
      socket = <span style="color: #0000ff">new</span> MulticastSocket(port);
      socket.joinGroup(group);
      String message = username +  <span style="color: #006080">"["</span> + InetAddress.getLocalHost() + <span style="color: #006080">"] 进入聊天室 "</span> + group + <span style="color: #006080">"! 端口号"</span>
        + portField.getText() + <span style="color: #006080">".\n"</span>;
      DatagramPacket hi = <span style="color: #0000ff">new</span> DatagramPacket(message.getBytes(),
        message.getBytes().length, group, port);
      socket.send(hi);
      nameField.setEditable(<span style="color: #0000ff">false</span>);
      joinButton.setEnabled(<span style="color: #0000ff">false</span>);
      leaveButton.setEnabled(<span style="color: #0000ff">true</span>);
      sendButton.setEnabled(<span style="color: #0000ff">true</span>);
      <span style="color: #0000ff">new</span> ReaderThread().start();
    }<span style="color: #0000ff">catch</span>(Exception ex) {
      textArea.append(<span style="color: #006080">"无法进入聊天室:"</span> + ex + <span style="color: #006080">"\n"</span>);
      ex.printStackTrace();
    }
  }

  <span style="color: #0000ff">void</span> send() {
    <span style="color: #0000ff">if</span>(socket == <span style="color: #0000ff">null</span>) <span style="color: #0000ff">return</span>;
    <span style="color: #0000ff">try</span> {
      String message = username + <span style="color: #006080">"["</span> + InetAddress.getLocalHost() + <span style="color: #006080">"] : "</span> + messageField.getText() + <span style="color: #006080">"\n"</span>;
      DatagramPacket hi = <span style="color: #0000ff">new</span> DatagramPacket(message.getBytes(),
        message.getBytes().length, group, port);
      socket.send(hi);
      messageField.requestFocus();
      messageField.selectAll();
    }<span style="color: #0000ff">catch</span>(Exception ex) {
      textArea.append(<span style="color: #006080">"无法发送消息:"</span> + ex + <span style="color: #006080">"\n"</span>);
    }
  }

  <span style="color: #0000ff">void</span> leave() {
    <span style="color: #0000ff">if</span>(socket == <span style="color: #0000ff">null</span>) <span style="color: #0000ff">return</span>;
    <span style="color: #0000ff">try</span> {
      textArea.append(<span style="color: #006080">"尝试离开聊天室..."</span>);
      String message = username + <span style="color: #006080">" 已经离开了聊天室 "</span> + group  + <span style="color: #006080">"!\n"</span>;
      DatagramPacket hi = <span style="color: #0000ff">new</span> DatagramPacket(message.getBytes(),
        message.getBytes().length, group, port);
      socket.send(hi);
      socket.leaveGroup(group);
      socket.close();
      socket = <span style="color: #0000ff">null</span>;
      nameField.setEditable(<span style="color: #0000ff">true</span>);
      joinButton.setEnabled(<span style="color: #0000ff">true</span>);
      leaveButton.setEnabled(<span style="color: #0000ff">false</span>);
      sendButton.setEnabled(<span style="color: #0000ff">false</span>);
      textArea.append(<span style="color: #006080">"你已经离开了聊天室!\n"</span>);
    }<span style="color: #0000ff">catch</span>(Exception ex) {
      textArea.append(<span style="color: #006080">"无法离开聊天室:"</span> + ex + <span style="color: #006080">"\n"</span>);
      ex.printStackTrace();
    }
  }

  <span style="color: #0000ff">void</span> this_windowClosing(WindowEvent e) {
    leave();
    System.exit(0);
  }
  
  <span style="color: #0000ff">class</span> ReaderThread extends Thread {

    <span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> run() {
      <span style="color: #0000ff">while</span>(socket != <span style="color: #0000ff">null</span>) {
        <span style="color: #0000ff">try</span> {
          <span style="color: #0000ff">byte</span>[] buf = <span style="color: #0000ff">new</span> <span style="color: #0000ff">byte</span>[1024];
          DatagramPacket recv = <span style="color: #0000ff">new</span> DatagramPacket(buf, buf.length);
          socket.receive(recv);
          textArea.append(<span style="color: #0000ff">new</span> String(recv.getData()));
        }<span style="color: #0000ff">catch</span>(Exception ex) {
        }
      }
    }

  }

  <span style="color: #0000ff">void</span> emptyButton_actionPerformed(ActionEvent e) {
    textArea.setText(<span style="color: #006080">""</span>);
  }

}</pre></div><img src ="http://www.blogjava.net/beansoft/aggbug/146178.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-09-18 15:33 <a href="http://www.blogjava.net/beansoft/archive/2007/09/18/146178.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 写的对象池代码(分享)</title><link>http://www.blogjava.net/beansoft/archive/2007/08/28/140538.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Tue, 28 Aug 2007 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/08/28/140538.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/140538.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/08/28/140538.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/140538.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/140538.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>&nbsp;*&nbsp;@(#)ObjectPoolManager.java&nbsp;1.00&nbsp;2005-5-1<br>&nbsp;*<br>&nbsp;*&nbsp;Copyright&nbsp;2005&nbsp;BeanSoft&nbsp;Studio.&nbsp;All&nbsp;rights&nbsp;reserved.<br>&nbsp;*&nbsp;PROPRIETARY/CONFIDENTIAL.&nbsp;Use&nbsp;is&nbsp;subject&nbsp;to&nbsp;license&nbsp;terms.<br>&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;beansoft.util;<br><br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.HashMap;<br><br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;beansoft.util.logging.Logger;<br><br></span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;*&nbsp;ObjectPoolManager,&nbsp;dynamic&nbsp;manage&nbsp;pooled&nbsp;objects'&nbsp;create&nbsp;and&nbsp;release.<br>&nbsp;*&nbsp;<br>&nbsp;*&nbsp;</span><span style="COLOR: #808080">@author</span><span style="COLOR: #008000">&nbsp;BeanSoft<br>&nbsp;*&nbsp;</span><span style="COLOR: #808080">@version</span><span style="COLOR: #008000">&nbsp;1.00&nbsp;2005-5-1<br>&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;ObjectPoolManager&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;Logger&nbsp;logger&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;beansoft.util.logging.Logger.getLogger(ObjectPoolManager.</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Holds&nbsp;instances&nbsp;of&nbsp;ObjectPool,&nbsp;the&nbsp;main&nbsp;key&nbsp;is&nbsp;the&nbsp;type&nbsp;of&nbsp;objects&nbsp;in&nbsp;this&nbsp;pool.&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;HashMap&nbsp;objectPools&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;HashMap();<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;This&nbsp;class&nbsp;is&nbsp;not&nbsp;instanceable.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;ObjectPoolManager()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Get&nbsp;a&nbsp;ObjectPool&nbsp;instance&nbsp;from&nbsp;the&nbsp;objectPools,&nbsp;if&nbsp;not&nbsp;found,&nbsp;then&nbsp;lazilly&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;create&nbsp;a&nbsp;new&nbsp;one.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;clazz&nbsp;the&nbsp;object&nbsp;type<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000">&nbsp;the&nbsp;ObjectPool&nbsp;instance<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000">&nbsp;ObjectPool&nbsp;getPool(Class&nbsp;clazz)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ObjectPool&nbsp;pool&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(ObjectPool)objectPools.get(clazz);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(pool&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pool&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;ObjectPool(clazz);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objectPools.put(clazz,&nbsp;pool);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;pool;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Get&nbsp;an&nbsp;instance&nbsp;of&nbsp;the&nbsp;given&nbsp;object&nbsp;in&nbsp;the&nbsp;corresponding&nbsp;object&nbsp;pool.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;clazz&nbsp;the&nbsp;object&nbsp;type<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000">&nbsp;the&nbsp;instance&nbsp;of&nbsp;the&nbsp;object&nbsp;type<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000">&nbsp;Object&nbsp;getInstance(Class&nbsp;clazz)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">getObject(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;clazz&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;getPool(clazz).getInstance();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Free&nbsp;the&nbsp;instance&nbsp;to&nbsp;the&nbsp;corresponding&nbsp;object&nbsp;pool.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;obj&nbsp;the&nbsp;object&nbsp;to&nbsp;be&nbsp;freeed<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;freeInstance(Object&nbsp;obj)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logger.debug(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Free&nbsp;object&nbsp;to&nbsp;pool</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;obj);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;getPool(obj.getClass()).freeInstance(obj);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>}<br></span></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>&nbsp;*&nbsp;The&nbsp;Apache&nbsp;Software&nbsp;License,&nbsp;Version&nbsp;1.1<br>&nbsp;*<br>&nbsp;*<br>&nbsp;*&nbsp;Copyright&nbsp;(c)&nbsp;1999&nbsp;The&nbsp;Apache&nbsp;Software&nbsp;Foundation.&nbsp;&nbsp;All&nbsp;rights<br>&nbsp;*&nbsp;reserved.<br>&nbsp;*<br>&nbsp;*&nbsp;Redistribution&nbsp;and&nbsp;use&nbsp;in&nbsp;source&nbsp;and&nbsp;binary&nbsp;forms,&nbsp;with&nbsp;or&nbsp;without<br>&nbsp;*&nbsp;modification,&nbsp;are&nbsp;permitted&nbsp;provided&nbsp;that&nbsp;the&nbsp;following&nbsp;conditions<br>&nbsp;*&nbsp;are&nbsp;met:<br>&nbsp;*<br>&nbsp;*&nbsp;1.&nbsp;Redistributions&nbsp;of&nbsp;source&nbsp;code&nbsp;must&nbsp;retain&nbsp;the&nbsp;above&nbsp;copyright<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;notice,&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer.<br>&nbsp;*<br>&nbsp;*&nbsp;2.&nbsp;Redistributions&nbsp;in&nbsp;binary&nbsp;form&nbsp;must&nbsp;reproduce&nbsp;the&nbsp;above&nbsp;copyright<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;notice,&nbsp;this&nbsp;list&nbsp;of&nbsp;conditions&nbsp;and&nbsp;the&nbsp;following&nbsp;disclaimer&nbsp;in<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;documentation&nbsp;and/or&nbsp;other&nbsp;materials&nbsp;provided&nbsp;with&nbsp;the<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;distribution.<br>&nbsp;*<br>&nbsp;*&nbsp;3.&nbsp;The&nbsp;end-user&nbsp;documentation&nbsp;included&nbsp;with&nbsp;the&nbsp;redistribution,<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;any,&nbsp;must&nbsp;include&nbsp;the&nbsp;following&nbsp;acknowledgment:<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"This&nbsp;product&nbsp;includes&nbsp;software&nbsp;developed&nbsp;by&nbsp;the<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Apache&nbsp;Software&nbsp;Foundation&nbsp;(</span><span style="COLOR: #008000; TEXT-DECORATION: underline">http://www.apache.org/</span><span style="COLOR: #008000">)."<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;Alternately,&nbsp;this&nbsp;acknowledgment&nbsp;may&nbsp;appear&nbsp;in&nbsp;the&nbsp;software&nbsp;itself,<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;and&nbsp;wherever&nbsp;such&nbsp;third-party&nbsp;acknowledgments&nbsp;normally&nbsp;appear.<br>&nbsp;*<br>&nbsp;*&nbsp;4.&nbsp;The&nbsp;names&nbsp;"Xalan"&nbsp;and&nbsp;"Apache&nbsp;Software&nbsp;Foundation"&nbsp;must<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;be&nbsp;used&nbsp;to&nbsp;endorse&nbsp;or&nbsp;promote&nbsp;products&nbsp;derived&nbsp;from&nbsp;this<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;software&nbsp;without&nbsp;prior&nbsp;written&nbsp;permission.&nbsp;For&nbsp;written<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;permission,&nbsp;please&nbsp;contact&nbsp;apache@apache.org.<br>&nbsp;*<br>&nbsp;*&nbsp;5.&nbsp;Products&nbsp;derived&nbsp;from&nbsp;this&nbsp;software&nbsp;may&nbsp;not&nbsp;be&nbsp;called&nbsp;"Apache",<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;nor&nbsp;may&nbsp;"Apache"&nbsp;appear&nbsp;in&nbsp;their&nbsp;name,&nbsp;without&nbsp;prior&nbsp;written<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;permission&nbsp;of&nbsp;the&nbsp;Apache&nbsp;Software&nbsp;Foundation.<br>&nbsp;*<br>&nbsp;*&nbsp;THIS&nbsp;SOFTWARE&nbsp;IS&nbsp;PROVIDED&nbsp;``AS&nbsp;IS''&nbsp;AND&nbsp;ANY&nbsp;EXPRESSED&nbsp;OR&nbsp;IMPLIED<br>&nbsp;*&nbsp;WARRANTIES,&nbsp;INCLUDING,&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO,&nbsp;THE&nbsp;IMPLIED&nbsp;WARRANTIES<br>&nbsp;*&nbsp;OF&nbsp;MERCHANTABILITY&nbsp;AND&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE&nbsp;ARE<br>&nbsp;*&nbsp;DISCLAIMED.&nbsp;&nbsp;IN&nbsp;NO&nbsp;EVENT&nbsp;SHALL&nbsp;THE&nbsp;APACHE&nbsp;SOFTWARE&nbsp;FOUNDATION&nbsp;OR<br>&nbsp;*&nbsp;ITS&nbsp;CONTRIBUTORS&nbsp;BE&nbsp;LIABLE&nbsp;FOR&nbsp;ANY&nbsp;DIRECT,&nbsp;INDIRECT,&nbsp;INCIDENTAL,<br>&nbsp;*&nbsp;SPECIAL,&nbsp;EXEMPLARY,&nbsp;OR&nbsp;CONSEQUENTIAL&nbsp;DAMAGES&nbsp;(INCLUDING,&nbsp;BUT&nbsp;NOT<br>&nbsp;*&nbsp;LIMITED&nbsp;TO,&nbsp;PROCUREMENT&nbsp;OF&nbsp;SUBSTITUTE&nbsp;GOODS&nbsp;OR&nbsp;SERVICES;&nbsp;LOSS&nbsp;OF<br>&nbsp;*&nbsp;USE,&nbsp;DATA,&nbsp;OR&nbsp;PROFITS;&nbsp;OR&nbsp;BUSINESS&nbsp;INTERRUPTION)&nbsp;HOWEVER&nbsp;CAUSED&nbsp;AND<br>&nbsp;*&nbsp;ON&nbsp;ANY&nbsp;THEORY&nbsp;OF&nbsp;LIABILITY,&nbsp;WHETHER&nbsp;IN&nbsp;CONTRACT,&nbsp;STRICT&nbsp;LIABILITY,<br>&nbsp;*&nbsp;OR&nbsp;TORT&nbsp;(INCLUDING&nbsp;NEGLIGENCE&nbsp;OR&nbsp;OTHERWISE)&nbsp;ARISING&nbsp;IN&nbsp;ANY&nbsp;WAY&nbsp;OUT<br>&nbsp;*&nbsp;OF&nbsp;THE&nbsp;USE&nbsp;OF&nbsp;THIS&nbsp;SOFTWARE,&nbsp;EVEN&nbsp;IF&nbsp;ADVISED&nbsp;OF&nbsp;THE&nbsp;POSSIBILITY&nbsp;OF<br>&nbsp;*&nbsp;SUCH&nbsp;DAMAGE.<br>&nbsp;*&nbsp;====================================================================<br>&nbsp;*<br>&nbsp;*&nbsp;This&nbsp;software&nbsp;consists&nbsp;of&nbsp;voluntary&nbsp;contributions&nbsp;made&nbsp;by&nbsp;many<br>&nbsp;*&nbsp;individuals&nbsp;on&nbsp;behalf&nbsp;of&nbsp;the&nbsp;Apache&nbsp;Software&nbsp;Foundation&nbsp;and&nbsp;was<br>&nbsp;*&nbsp;originally&nbsp;based&nbsp;on&nbsp;software&nbsp;copyright&nbsp;(c)&nbsp;1999,&nbsp;Lotus<br>&nbsp;*&nbsp;Development&nbsp;Corporation.,&nbsp;</span><span style="COLOR: #008000; TEXT-DECORATION: underline">http://www.lotus.com</span><span style="COLOR: #008000">.&nbsp;&nbsp;For&nbsp;more<br>&nbsp;*&nbsp;information&nbsp;on&nbsp;the&nbsp;Apache&nbsp;Software&nbsp;Foundation,&nbsp;please&nbsp;see<br>&nbsp;*&nbsp;&lt;</span><span style="COLOR: #008000; TEXT-DECORATION: underline">http://www.apache.org/</span><span style="COLOR: #008000">&gt;.<br>&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">package</span><span style="COLOR: #000000">&nbsp;beansoft.util;<br><br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.util.Vector;<br><br><br></span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;*&nbsp;&lt;meta&nbsp;name="usage"&nbsp;content="internal"/&gt;<br>&nbsp;*&nbsp;Pool&nbsp;of&nbsp;object&nbsp;of&nbsp;a&nbsp;given&nbsp;type&nbsp;to&nbsp;pick&nbsp;from&nbsp;to&nbsp;help&nbsp;memory&nbsp;usage<br>&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;ObjectPool&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;java.io.Serializable<br>{<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000">&nbsp;Type&nbsp;of&nbsp;objects&nbsp;in&nbsp;this&nbsp;pool.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;</span><span style="COLOR: #808080">@serial</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;Class&nbsp;objectType;<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000">&nbsp;Vector&nbsp;of&nbsp;given&nbsp;objects&nbsp;this&nbsp;points&nbsp;to.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;</span><span style="COLOR: #808080">@serial</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000">&nbsp;Vector&nbsp;freeStack;<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;*&nbsp;Constructor&nbsp;ObjectPool<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;type&nbsp;Type&nbsp;of&nbsp;objects&nbsp;for&nbsp;this&nbsp;pool<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;ObjectPool(Class&nbsp;type)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;objectType&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;type;<br>&nbsp;&nbsp;&nbsp;&nbsp;freeStack&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Vector();<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;*&nbsp;Constructor&nbsp;ObjectPool<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;className&nbsp;Fully&nbsp;qualified&nbsp;name&nbsp;of&nbsp;the&nbsp;type&nbsp;of&nbsp;objects&nbsp;for&nbsp;this&nbsp;pool.<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;ObjectPool(String&nbsp;className)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objectType&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Class.forName(className);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(ClassNotFoundException&nbsp;cnfe)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;RuntimeException(cnfe);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;freeStack&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Vector();<br>&nbsp;&nbsp;}<br><br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;*&nbsp;Constructor&nbsp;ObjectPool<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;type&nbsp;Type&nbsp;of&nbsp;objects&nbsp;for&nbsp;this&nbsp;pool<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;size&nbsp;Size&nbsp;of&nbsp;vector&nbsp;to&nbsp;allocate<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;ObjectPool(Class&nbsp;type,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;size)<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;objectType&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;type;<br>&nbsp;&nbsp;&nbsp;&nbsp;freeStack&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Vector(size);<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;*&nbsp;Constructor&nbsp;ObjectPool<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;ObjectPool()<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;objectType&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;freeStack&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Vector();<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;*&nbsp;Get&nbsp;an&nbsp;instance&nbsp;of&nbsp;the&nbsp;given&nbsp;object&nbsp;in&nbsp;this&nbsp;pool&nbsp;if&nbsp;available<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000">&nbsp;an&nbsp;instance&nbsp;of&nbsp;the&nbsp;given&nbsp;object&nbsp;if&nbsp;available&nbsp;or&nbsp;null<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000">&nbsp;Object&nbsp;getInstanceIfFree()<br>&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Check&nbsp;if&nbsp;the&nbsp;pool&nbsp;is&nbsp;empty.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">freeStack.isEmpty())<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Remove&nbsp;object&nbsp;from&nbsp;end&nbsp;of&nbsp;free&nbsp;pool.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;freeStack.lastElement();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;freeStack.setSize(freeStack.size()&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;result;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;*&nbsp;Get&nbsp;an&nbsp;instance&nbsp;of&nbsp;the&nbsp;given&nbsp;object&nbsp;in&nbsp;this&nbsp;pool<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@return</span><span style="COLOR: #008000">&nbsp;An&nbsp;instance&nbsp;of&nbsp;the&nbsp;given&nbsp;object<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000">&nbsp;Object&nbsp;getInstance()<br>&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Check&nbsp;if&nbsp;the&nbsp;pool&nbsp;is&nbsp;empty.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(freeStack.isEmpty())<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Create&nbsp;a&nbsp;new&nbsp;object&nbsp;if&nbsp;so.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;objectType.newInstance();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(InstantiationException&nbsp;ex){}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">&nbsp;(IllegalAccessException&nbsp;ex){}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Throw&nbsp;unchecked&nbsp;exception&nbsp;for&nbsp;error&nbsp;in&nbsp;pool&nbsp;configuration.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;RuntimeException(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">exception&nbsp;creating&nbsp;new&nbsp;instance&nbsp;for&nbsp;pool</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">"exception&nbsp;creating&nbsp;new&nbsp;instance&nbsp;for&nbsp;pool");</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Remove&nbsp;object&nbsp;from&nbsp;end&nbsp;of&nbsp;free&nbsp;pool.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Object&nbsp;result&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;freeStack.lastElement();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;freeStack.setSize(freeStack.size()&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;result;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br>&nbsp;&nbsp;&nbsp;*&nbsp;Add&nbsp;an&nbsp;instance&nbsp;of&nbsp;the&nbsp;given&nbsp;object&nbsp;to&nbsp;the&nbsp;pool<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000">&nbsp;obj&nbsp;Object&nbsp;to&nbsp;add.<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">synchronized</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;freeInstance(Object&nbsp;obj)<br>&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Make&nbsp;sure&nbsp;the&nbsp;object&nbsp;is&nbsp;of&nbsp;the&nbsp;correct&nbsp;type.<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Remove&nbsp;safety.&nbsp;&nbsp;-sb<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;if&nbsp;(objectType.isInstance(obj))<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;{</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;freeStack.addElement(obj);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;throw&nbsp;new&nbsp;IllegalArgumentException("argument&nbsp;type&nbsp;invalid&nbsp;for&nbsp;pool");<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;}</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;}<br>}</span></div>
<img src ="http://www.blogjava.net/beansoft/aggbug/140538.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-08-28 15:35 <a href="http://www.blogjava.net/beansoft/archive/2007/08/28/140538.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>上学时候的练习: JDBC Explorer</title><link>http://www.blogjava.net/beansoft/archive/2007/07/18/131068.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Wed, 18 Jul 2007 06:36:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/07/18/131068.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/131068.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/07/18/131068.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/131068.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/131068.html</trackback:ping><description><![CDATA[<p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/JDBCExplorer_CCB8/image%7B0%7D%5B2%5D.png" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="480" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/JDBCExplorer_CCB8/image%7B0%7D_thumb.png" width="640" border="0"></a> </p> <p><a href="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/JDBCExplorer_CCB8/image%7B0%7D%5B5%5D.png" atomicselection="true"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="362" src="http://www.blogjava.net/images/blogjava_net/beansoft/WindowsLiveWriter/JDBCExplorer_CCB8/image%7B0%7D_thumb%5B1%5D.png" width="554" border="0"></a> </p> <p>基于 JDBC 的数据库浏览软件. 源码写的很乱, 刚学 Java 和 Swing 时候写的练习, 下载地址:</p> <p><a title="https://gro.clinux.org/frs/download.php/2036/jdbcexplorer-1_1.zip" href="https://gro.clinux.org/frs/download.php/2036/jdbcexplorer-1_1.zip">https://gro.clinux.org/frs/download.php/2036/jdbcexplorer-1_1.zip</a>&nbsp; 811KB</p><img src ="http://www.blogjava.net/beansoft/aggbug/131068.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-07-18 14:36 <a href="http://www.blogjava.net/beansoft/archive/2007/07/18/131068.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件开发项目文档(很老的资料了)</title><link>http://www.blogjava.net/beansoft/archive/2007/07/11/129650.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Wed, 11 Jul 2007 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/07/11/129650.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/129650.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/07/11/129650.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/129650.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/129650.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.任务申请.doc<br>2.可行性与计划阶段--可行性研究报告.doc...&nbsp;&nbsp;<a href='http://www.blogjava.net/beansoft/archive/2007/07/11/129650.html'>阅读全文</a><img src ="http://www.blogjava.net/beansoft/aggbug/129650.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-07-11 16:50 <a href="http://www.blogjava.net/beansoft/archive/2007/07/11/129650.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>URL 类加载器测试</title><link>http://www.blogjava.net/beansoft/archive/2007/06/27/126555.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Wed, 27 Jun 2007 04:41:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/06/27/126555.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/126555.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/06/27/126555.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/126555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/126555.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.net.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br><br></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;ClasspathTest&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000">&nbsp;Exception&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;oldClassPath&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;System.getProperty(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">java.class.path</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(oldClassPath);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.setProperty(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">java.class.path</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;oldClassPath&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;D:\\BeanSoft\\ZIP\\;.;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(System.getProperty(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">java.class.path</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL[]&nbsp;urls&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;URL(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">file:/d:/BeanSoft/beansoftZipV1.0.jar</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URLClassLoader&nbsp;loader&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;URLClassLoader.newInstance(urls);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Class.forName("HTMLEditor").newInstance();</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader.loadClass(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">zip.ui.ZIP</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">).newInstance();<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}</span></div>
<img src ="http://www.blogjava.net/beansoft/aggbug/126555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beansoft/" target="_blank">BeanSoft</a> 2007-06-27 12:41 <a href="http://www.blogjava.net/beansoft/archive/2007/06/27/126555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简易计算器(需要一个图标文件, 如果报错,随便找个小图片)</title><link>http://www.blogjava.net/beansoft/archive/2007/06/27/126551.html</link><dc:creator>BeanSoft</dc:creator><author>BeanSoft</author><pubDate>Wed, 27 Jun 2007 04:33:00 GMT</pubDate><guid>http://www.blogjava.net/beansoft/archive/2007/06/27/126551.html</guid><wfw:comment>http://www.blogjava.net/beansoft/comments/126551.html</wfw:comment><comments>http://www.blogjava.net/beansoft/archive/2007/06/27/126551.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/beansoft/comments/commentRss/126551.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beansoft/services/trackbacks/126551.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br>&nbsp;*&nbsp;@(#)Calculator.java&nbsp;1.0&nbsp;02/11/07<br>&nbsp;*<br>&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.awt.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000">&nbsp;java.awt.event.</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">;<br><br></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CalculatorPanel&nbsp;</span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000">&nbsp;Panel&nbsp;</span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000">&nbsp;ActionListener&nbsp;&nbsp;{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;TextField&nbsp;display;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;arg;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;String&nbsp;op&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">boolean</span><span style="COLOR: #000000">&nbsp;start&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;CalculatorPanel()&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setLayout(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;BorderLayout());<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;TextField(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;display.setEditable(</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(display,&nbsp;BorderLayout.NORTH);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Panel&nbsp;p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Panel();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.setLayout(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;GridLayout(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.add(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Label());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Button&nbsp;button&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Button(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">退格</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Backspace</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button.addActionListener(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.add(button);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.add(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Label());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Button(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">归零</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button.addActionListener(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.add(button);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.add(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Label());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;buttons&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">789&#215;&#247;456+-123.=0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;buttons.length();&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addButton(p,&nbsp;buttons.substring(i,&nbsp;i</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Button(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">平方根</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button.addActionListener(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.add(button);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Button(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">倒数</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button.addActionListener(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.add(button);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Button(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">立方根</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button.addActionListener(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.add(button);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Button(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ln(x)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button.addActionListener(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.add(button);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(p,&nbsp;BorderLayout.CENTER);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;addButton(Container&nbsp;c,&nbsp;String&nbsp;s)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Button&nbsp;b&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Button(s);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.add(b);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b.addActionListener(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;actionPerformed(ActionEvent&nbsp;evt)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;evt.getActionCommand();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;s.charAt(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;s.charAt(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;s.equals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">.</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(start)&nbsp;display.setText(s);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;display.setText(display.getText()&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;s);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s.equals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">退格</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;backspace();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s.equals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">归零</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reset();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s.equals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">平方根</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqrt();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s.equals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">立方根</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqrt3();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s.equals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">倒数</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reciprocal();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(s.equals(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ln(x)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">))&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lnX();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(start)&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n