﻿<?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-learning java-随笔分类-java</title><link>http://www.blogjava.net/lmsun/category/2323.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 03 Mar 2007 09:07:06 GMT</lastBuildDate><pubDate>Sat, 03 Mar 2007 09:07:06 GMT</pubDate><ttl>60</ttl><item><title>corejava读书笔记</title><link>http://www.blogjava.net/lmsun/archive/2006/06/23/54655.html</link><dc:creator>my java</dc:creator><author>my java</author><pubDate>Fri, 23 Jun 2006 05:25:00 GMT</pubDate><guid>http://www.blogjava.net/lmsun/archive/2006/06/23/54655.html</guid><wfw:comment>http://www.blogjava.net/lmsun/comments/54655.html</wfw:comment><comments>http://www.blogjava.net/lmsun/archive/2006/06/23/54655.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/lmsun/comments/commentRss/54655.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lmsun/services/trackbacks/54655.html</trackback:ping><description><![CDATA[第二章 Java编程环境<br />2.1安装java<br />1、java工具包<a href="http://java.sun.com/j2se/1.4/install-windows.html">http://java.sun.com/j2se/1.4/install-windows.html</a><br />2、设置执行环境（windows 2000)<br />PATH=c:\jdk\bin;<br />3、安装库源文件和文档<br />jar xvf src.jar<br />jar xvf j2sdkversion-doc.zip<br /><br />第一个java例子<br />eg:Weclome.java<br /><br />public class Welcome<br />{<br />public static void main(String[] args)<br />{<br />String[] greeting=new String[3];<br />greeting[0]="Welcome to Core Java";<br />greeting[1]="by Car Horstman";<br />greeting[2]="and Gary Cornell";<br />for ( int i=0;i&lt;greeting.length;i++)<br />System.out.println(greeting[i]);<br />}<br />}<br /><br /><img src ="http://www.blogjava.net/lmsun/aggbug/54655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lmsun/" target="_blank">my java</a> 2006-06-23 13:25 <a href="http://www.blogjava.net/lmsun/archive/2006/06/23/54655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jspsmartupload使用技巧</title><link>http://www.blogjava.net/lmsun/archive/2006/06/23/54613.html</link><dc:creator>my java</dc:creator><author>my java</author><pubDate>Fri, 23 Jun 2006 01:34:00 GMT</pubDate><guid>http://www.blogjava.net/lmsun/archive/2006/06/23/54613.html</guid><wfw:comment>http://www.blogjava.net/lmsun/comments/54613.html</wfw:comment><comments>http://www.blogjava.net/lmsun/archive/2006/06/23/54613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lmsun/comments/commentRss/54613.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lmsun/services/trackbacks/54613.html</trackback:ping><description><![CDATA[1、获得表单中文本框的数据：<br />mySmartUpload.getRequest().getParameter("applyusrname")<br />java.util.Enumeration e = mySmartUpload.getRequest().getParameterNames();<img src ="http://www.blogjava.net/lmsun/aggbug/54613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lmsun/" target="_blank">my java</a> 2006-06-23 09:34 <a href="http://www.blogjava.net/lmsun/archive/2006/06/23/54613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Strings</title><link>http://www.blogjava.net/lmsun/archive/2005/09/05/12028.html</link><dc:creator>my java</dc:creator><author>my java</author><pubDate>Mon, 05 Sep 2005 05:56:00 GMT</pubDate><guid>http://www.blogjava.net/lmsun/archive/2005/09/05/12028.html</guid><wfw:comment>http://www.blogjava.net/lmsun/comments/12028.html</wfw:comment><comments>http://www.blogjava.net/lmsun/archive/2005/09/05/12028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lmsun/comments/commentRss/12028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lmsun/services/trackbacks/12028.html</trackback:ping><description><![CDATA[<UL>
<LI>
<P class=docList><TT>char charAt(int index)</TT></P>
<P class=docList>returns the character at the specified location.</P>
<LI>
<P class=docList><TT>int compareTo(String other)</TT></P>
<P class=docList>returns a negative value if the string comes before <TT>other</TT> in dictionary order, a positive value if the string comes after <TT>other</TT> in dictionary order, or 0 if the strings are equal.</P>
<LI>
<P class=docList><TT>boolean endsWith(String suffix)</TT></P>
<P class=docList>returns <TT>true</TT> if the string ends with <TT>suffix</TT>.</P>
<LI>
<P class=docList><TT>boolean equals(Object other)</TT></P>
<P class=docList>returns <TT>true</TT> if the string equals <TT>other.</TT></P>
<LI>
<P class=docList><TT>boolean equalsIgnoreCase(String other)</TT></P>
<P class=docList>returns <TT>true</TT> if the string equals <TT>other</TT>, except for upper/lowercase distinction.</P>
<LI>
<P class=docList><TT>int indexOf(String str)</TT></P>
<LI>
<P class=docList><TT>int indexOf(String str, int fromIndex)</TT></P>
<P class=docList>return the start of the first substring equal to <TT>str</TT>, starting at index 0 or at <TT>fromIndex</TT>.</P>
<LI>
<P class=docList><TT>int lastIndexOf(String str)</TT></P>
<LI>
<P class=docList><TT>int lastIndexOf(String str, int fromIndex)</TT></P>
<P class=docList>return the start of the last substring equal to <TT>str</TT>, starting at the end of the string or at <TT>fromIndex</TT>.</P>
<LI>
<P class=docList><TT>int length()</TT></P>
<P class=docList>returns the length of the string.</P>
<LI>
<P class=docList><TT>String replace(char oldChar, char newChar)</TT></P>
<P class=docList>returns a new string that is obtained by replacing all characters <TT>oldChar</TT> in the string with <TT>newChar</TT>.</P>
<LI>
<P class=docList><TT>boolean startsWith(String prefix)</TT></P>
<P class=docList>returns <TT>true</TT> if the string begins with <TT>prefix</TT>.</P>
<LI>
<P class=docList><TT>String substring(int beginIndex)</TT></P>
<LI>
<P class=docList><TT>String substring(int beginIndex, int endIndex)</TT></P>
<P class=docList>return a new string consisting of all characters from <TT>beginIndex</TT> until the end of the string or until <TT>endIndex</TT> (exclusive).</P>
<LI>
<P class=docList><TT>String toLowerCase()</TT></P>
<P class=docList>returns a new string containing all characters in the original string, with uppercase characters converted to lower case.</P>
<LI>
<P class=docList><TT>String toUpperCase()</TT></P>
<P class=docList>returns a new string containing all characters in the original string, with lowercase characters converted to upper case.</P>
<LI>
<P class=docList><TT>String trim()</TT></P>
<P class=docList>returns a new string by eliminating all leading and trailing spaces in the original string.</P></LI></UL>
<P class=docList>字符串与基本数据类型的转换间的转换必须使用JSP中的对象函数<BR>Boolean.getBoolean(String)<BR>Byte.parseByte(String)<BR>Short.parseShort(String)<BR>Integer.parseInt(String)<BR>Long.parseLong(String)<BR>Float.parseDouble(String)<BR>Double.parseDouble(String)<BR>String.valueOF(数据)<BR><BR><BR>Array<BR><BR></P>
<LI>
<P class=docList><TT>static void <FONT style="BACKGROUND-COLOR: #0a246a" color=#ffffff>arraycopy</FONT>(Object from, int fromIndex, Object to, int toIndex, int count)</TT></P>
<P>
<TABLE cellSpacing=0 cellPadding=5 rules=none width="90%" frame=void>
<COLGROUP span=3 align=left>
<THEAD></THEAD>
<TBODY>
<TR>
<TD class=docTableCell vAlign=top>
<P class=docText><SPAN class=docEmphasis>Parameters:</SPAN></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText><TT>from</TT></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText>an array of any type (<A class=docLink href="mk:@MSITStore:F:\java\0130471771%20-%20Core%20Java%202%20Volume%20I,%20Fundamentals%206th%20Edition%20-%20fly%20rebuild.chm::/ch05.html#ch05">Chapter 5</A> explains why this is a parameter of type <TT>Object</TT>)</P></TD></TR>
<TR>
<TD class=docTableCell vAlign=top>&nbsp;</TD>
<TD class=docTableCell vAlign=top>
<P class=docText><TT>fromIndex</TT></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText>the starting index from which to copy elements</P></TD></TR>
<TR>
<TD class=docTableCell vAlign=top>&nbsp;</TD>
<TD class=docTableCell vAlign=top>
<P class=docText><TT>to</TT></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText>an array of the same type as <TT>from</TT></P></TD></TR>
<TR>
<TD class=docTableCell vAlign=top>&nbsp;</TD>
<TD class=docTableCell vAlign=top>
<P class=docText><TT>toIndex</TT></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText>the starting index to which to copy elements</P></TD></TR>
<TR>
<TD class=docTableCell vAlign=top>&nbsp;</TD>
<TD class=docTableCell vAlign=top>
<P class=docText><TT>count</TT></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText>the number of elements to copy</P></TD></TR></COLGROUP></TBODY></TABLE></P>
<P class=docList>copies elements from the first array to the second array.</P>
<H2 class=docSidebarTitle><TT>java.util.Arrays</TT> 1.2</H2>
<P class=docList>&nbsp;</P>
<UL>
<LI>
<P class=docList><TT>static void sort(</TT><SPAN class=docEmphasis><TT>Xxx</TT></SPAN><TT>[] a)</TT></P>
<P>
<TABLE cellSpacing=0 cellPadding=5 rules=none width="90%" frame=void>
<COLGROUP span=3 align=left>
<THEAD></THEAD>
<TBODY>
<TR>
<TD class=docTableCell vAlign=top>
<P class=docText><SPAN class=docEmphasis>Parameters:</SPAN></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText><TT>a</TT></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText>an array of type <TT>int</TT>, <TT>long</TT>, <TT>short</TT>, <TT>char</TT>, <TT>byte</TT>, <TT>boolean</TT>, <TT>float</TT> or <TT>double</TT></P></TD></TR></COLGROUP></TBODY></TABLE></P>
<P class=docList>sorts the array, using a tuned QuickSort algorithm.</P>
<LI>
<P class=docList><TT>static int binarySearch(</TT><SPAN class=docEmphasis><TT>Xxx</TT></SPAN><TT>[] a, </TT><SPAN class=docEmphasis><TT>Xxx</TT></SPAN> <TT>v)</TT></P>
<P>
<TABLE cellSpacing=0 cellPadding=5 rules=none width="90%" frame=void>
<COLGROUP span=3 align=left>
<THEAD></THEAD>
<TBODY>
<TR>
<TD class=docTableCell vAlign=top>
<P class=docText><SPAN class=docEmphasis>Parameters:</SPAN></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText><TT>a</TT></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText>a <SPAN class=docEmphasis>sorted</SPAN> array of type <TT>int</TT>, <TT>long</TT>, <TT>short</TT>, <TT>char</TT>, <TT>byte</TT>, <TT>boolean</TT>, <TT>float</TT> or <TT>double</TT></P></TD></TR>
<TR>
<TD class=docTableCell vAlign=top>&nbsp;</TD>
<TD class=docTableCell vAlign=top>
<P class=docText><TT>v</TT></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText>a value of the same type as the elements of <TT>a</TT></P></TD></TR></COLGROUP></TBODY></TABLE></P>
<P class=docList>uses the BinarySearch algorithm to search for the value <TT>v</TT>. If it is found, its index is returned. Otherwise, a negative value <TT>r</TT> is returned; <TT>-r - 1</TT> is the spot at which <TT>v</TT> should be inserted to keep <TT>a</TT> sorted.</P>
<LI>
<P class=docList><TT>static void fill(</TT><SPAN class=docEmphasis><TT>Xxx</TT></SPAN><TT>[] a, </TT><SPAN class=docEmphasis><TT>Xxx</TT></SPAN> <TT>v)</TT></P>
<P>
<TABLE cellSpacing=0 cellPadding=5 rules=none width="90%" frame=void>
<COLGROUP span=3 align=left>
<THEAD></THEAD>
<TBODY>
<TR>
<TD class=docTableCell vAlign=top>
<P class=docText><SPAN class=docEmphasis>Parameters:</SPAN></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText><TT>a</TT></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText>an array of type <TT>int</TT>, <TT>long</TT>, <TT>short</TT>, <TT>char</TT>, <TT>byte</TT>, <TT>boolean</TT>, <TT>float</TT> or <TT>double</TT></P></TD></TR>
<TR>
<TD class=docTableCell vAlign=top>&nbsp;</TD>
<TD class=docTableCell vAlign=top>
<P class=docText><TT>v</TT></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText>a value of the same type as the elements of <TT>a</TT></P></TD></TR></COLGROUP></TBODY></TABLE></P>
<P class=docList>sets all elements of the array to <TT>v</TT>.</P>
<LI>
<P class=docList><TT>static boolean equals(</TT><SPAN class=docEmphasis><TT>Xxx</TT></SPAN><TT>[] a, Object other)</TT></P>
<P>
<TABLE cellSpacing=0 cellPadding=5 rules=none width="90%" frame=void>
<COLGROUP span=3 align=left>
<THEAD></THEAD>
<TBODY>
<TR>
<TD class=docTableCell vAlign=top>
<P class=docText><SPAN class=docEmphasis>Parameters:</SPAN></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText><TT>a</TT></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText>an array of type <TT>int</TT>, <TT>long</TT>, <TT>short</TT>, <TT>char</TT>, <TT>byte</TT>, <TT>boolean</TT>, <TT>float</TT> or <TT>double</TT></P></TD></TR>
<TR>
<TD class=docTableCell vAlign=top>&nbsp;</TD>
<TD class=docTableCell vAlign=top>
<P class=docText><TT>other</TT></P></TD>
<TD class=docTableCell vAlign=top>
<P class=docText>an object</P></TD></TR></COLGROUP></TBODY></TABLE></P>
<P class=docList>returns <TT>true</TT> if <TT>other</TT> is an array of the same type, if it has the same length, and if the elements in corresponding indexes match.</P></LI></UL></LI>
<P class=docList>eg:&nbsp;<BR><BR>&nbsp;int[] smallPrimes = {2, 3, 5, 7, 11, 13};<BR>&nbsp;&nbsp;int[] luckyNumbers = {1001, 1002, 1003, 1004, 1005, 1006, 1007};<BR>&nbsp;&nbsp;System.arraycopy(smallPrimes, 2, luckyNumbers, 3, 3);<BR>&nbsp;&nbsp;for (int i = 0; i &lt; luckyNumbers.length; i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(i + ": " + luckyNumbers[i]);</P><img src ="http://www.blogjava.net/lmsun/aggbug/12028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lmsun/" target="_blank">my java</a> 2005-09-05 13:56 <a href="http://www.blogjava.net/lmsun/archive/2005/09/05/12028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jaas link</title><link>http://www.blogjava.net/lmsun/archive/2005/08/25/11054.html</link><dc:creator>my java</dc:creator><author>my java</author><pubDate>Thu, 25 Aug 2005 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/lmsun/archive/2005/08/25/11054.html</guid><wfw:comment>http://www.blogjava.net/lmsun/comments/11054.html</wfw:comment><comments>http://www.blogjava.net/lmsun/archive/2005/08/25/11054.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lmsun/comments/commentRss/11054.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lmsun/services/trackbacks/11054.html</trackback:ping><description><![CDATA[<A href="http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/JAASRefGuide.htmlhttp://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/JAASLMDevGuide.html"><FONT color=#000000>http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/JAASRefGuide.html<BR></FONT><BR>http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/JAASLMDevGuide.html</A><BR><BR><A class=docLink href="http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/JAASRefGuide.html" target=_blank>http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/JAASRefGuide.html</A><BR><BR><A class=docLink href="http://java.sun.com/j2se/1.4.1/docs/api/javax/security/auth/login/Configuration.html" target=_blank>http://java.sun.com/j2se/1.4.1/docs/api/javax/security/auth/login/Configuration.html</A><img src ="http://www.blogjava.net/lmsun/aggbug/11054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lmsun/" target="_blank">my java</a> 2005-08-25 14:29 <a href="http://www.blogjava.net/lmsun/archive/2005/08/25/11054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC实例代码</title><link>http://www.blogjava.net/lmsun/archive/2005/08/24/10917.html</link><dc:creator>my java</dc:creator><author>my java</author><pubDate>Wed, 24 Aug 2005 06:49:00 GMT</pubDate><guid>http://www.blogjava.net/lmsun/archive/2005/08/24/10917.html</guid><wfw:comment>http://www.blogjava.net/lmsun/comments/10917.html</wfw:comment><comments>http://www.blogjava.net/lmsun/archive/2005/08/24/10917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lmsun/comments/commentRss/10917.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lmsun/services/trackbacks/10917.html</trackback:ping><description><![CDATA[<P><BR><STRONG>DBPhoneLookupReuse.java</STRONG><BR>import java.io.*;<BR>import java.sql.*;<BR>import javax.servlet.*;<BR>import javax.servlet.http.*;</P>
<P>public class DBPhoneLookupReuse extends HttpServlet {</P>
<P>&nbsp; private Connection con = null;</P>
<P>&nbsp; public void init() throws ServletException {<BR>&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Load (and therefore register) the Sybase driver<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class.forName("com.jnetdirect.jsql.JSQLDriver");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; con = DriverManager.getConnection(<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "jdbc:JSQLConnect://127.0.0.1/database=JAAS", "sa", "db_password");<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; catch (ClassNotFoundException e) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new UnavailableException("Couldn't load database driver");<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; catch (SQLException e) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new UnavailableException("Couldn't get db connection");<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }</P>
<P>&nbsp; public void doGet(HttpServletRequest req, HttpServletResponse res)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws ServletException, IOException {<BR>&nbsp;&nbsp;&nbsp; res.setContentType("text/html");<BR>&nbsp;&nbsp;&nbsp; PrintWriter out = res.getWriter();</P>
<P>&nbsp;&nbsp;&nbsp; out.println("&lt;HTML&gt;&lt;HEAD&gt;&lt;TITLE&gt;Phonebook&lt;/TITLE&gt;&lt;/HEAD&gt;");<BR>&nbsp;&nbsp;&nbsp; out.println("&lt;BODY&gt;");</P>
<P>&nbsp;&nbsp;&nbsp; HtmlSQLResult result =<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new HtmlSQLResult("SELECT UserName,Password FROM Users", con);</P>
<P>&nbsp;&nbsp;&nbsp; // Display the resulting output<BR>&nbsp;&nbsp;&nbsp; out.println("&lt;H2&gt;Users:&lt;/H2&gt;");<BR>&nbsp;&nbsp;&nbsp; out.println(result);<BR>&nbsp;&nbsp;&nbsp; out.println("&lt;/BODY&gt;&lt;/HTML&gt;");<BR>&nbsp; }</P>
<P>&nbsp; public void destroy() {<BR>&nbsp;&nbsp;&nbsp; // Clean up.<BR>&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (con != null) con.close();<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; catch (SQLException ignored) { }<BR>&nbsp; }<BR>}<BR><BR><STRONG>HtmlSQLResult.java</STRONG><BR>import java.sql.*;</P>
<P>public class HtmlSQLResult {<BR>&nbsp; private String sql;<BR>&nbsp; private Connection con;</P>
<P>&nbsp; public HtmlSQLResult(String sql, Connection con) {<BR>&nbsp;&nbsp;&nbsp; this.sql = sql;<BR>&nbsp;&nbsp;&nbsp; this.con = con;<BR>&nbsp; }</P>
<P>&nbsp; public String toString() {&nbsp; // can be called at most once<BR>&nbsp;&nbsp;&nbsp; StringBuffer out = new StringBuffer();</P>
<P>&nbsp;&nbsp;&nbsp; // Uncomment the following line to display the SQL command at start of table<BR>&nbsp;&nbsp;&nbsp; // out.append("Results of SQL Statement: " + sql + "&lt;P&gt;\n");</P>
<P>&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Statement stmt = con.createStatement();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (stmt.execute(sql)) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // There's a ResultSet to be had<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSet rs = stmt.getResultSet();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.append("&lt;TABLE&gt;\n");</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ResultSetMetaData rsmd = rs.getMetaData();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int numcols = rsmd.getColumnCount();<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Title the table with the result set's column labels<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.append("&lt;TR&gt;");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 1; i &lt;= numcols; i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.append("&lt;TH&gt;" + rsmd.getColumnLabel(i));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.append("&lt;/TR&gt;\n");</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(rs.next()) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.append("&lt;TR&gt;");&nbsp; // start a new row<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i = 1; i &lt;= numcols; i++) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.append("&lt;TD&gt;");&nbsp; // start a new data element<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object obj = rs.getObject(i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (obj != null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.append(obj.toString());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.append("&amp;nbsp;");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.append("&lt;/TR&gt;\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // End the table<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.append("&lt;/TABLE&gt;\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // There's a count to be had<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.append("&lt;B&gt;Records Affected:&lt;/B&gt; " + stmt.getUpdateCount());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; catch (SQLException e) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.append("&lt;/TABLE&gt;&lt;H1&gt;ERROR:&lt;/H1&gt; " + e.getMessage());<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp; return out.toString();<BR>&nbsp; }<BR>}<BR></P><img src ="http://www.blogjava.net/lmsun/aggbug/10917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lmsun/" target="_blank">my java</a> 2005-08-24 14:49 <a href="http://www.blogjava.net/lmsun/archive/2005/08/24/10917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JCIFS NTLM</title><link>http://www.blogjava.net/lmsun/archive/2005/08/19/10484.html</link><dc:creator>my java</dc:creator><author>my java</author><pubDate>Fri, 19 Aug 2005 03:06:00 GMT</pubDate><guid>http://www.blogjava.net/lmsun/archive/2005/08/19/10484.html</guid><wfw:comment>http://www.blogjava.net/lmsun/comments/10484.html</wfw:comment><comments>http://www.blogjava.net/lmsun/archive/2005/08/19/10484.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lmsun/comments/commentRss/10484.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lmsun/services/trackbacks/10484.html</trackback:ping><description><![CDATA[<P>1、NTLM can be done with JCIFS and without HTTP. Only a few lines of code are required in the code of your servlet:</P>
<P>InetAddress ip = InetAddress.getByName(”192.168.0.1.”); // ip address of your windows controller<BR>UniAddress myDomain = new UniAddress(ip);<BR>NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(”MYDOMAIN”, “mylogin”, “mypasword”);<BR>SmbSession.logon(myDomain, auth);</P>
<P>If an exception is triggered, the controller didn’t like the login and the password <BR><BR>2、Http方式下web.xml中filter的配置:<BR><BR>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<BR>&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "<A href="http://java.sun.com/dtd/web-app_2_3.dtd">http://java.sun.com/dtd/web-app_2_3.dtd</A>"&gt;<BR>&lt;web-app&gt;<BR>&nbsp;&lt;display-name&gt;WEB APP&lt;/display-name&gt;<BR>&nbsp;&lt;description&gt;WEB APP description&lt;/description&gt;<BR>&nbsp;&lt;servlet&gt;<BR>&nbsp;&nbsp;&lt;servlet-name&gt;ShowRequestHeaders&lt;/servlet-name&gt;<BR>&nbsp;&nbsp;&lt;servlet-class&gt;coreservlets.ShowRequestHeaders&lt;/servlet-class&gt;<BR>&nbsp;&lt;/servlet&gt;<BR>&nbsp;&lt;servlet-mapping&gt;<BR>&nbsp;&nbsp;&lt;servlet-name&gt;ShowRequestHeaders&lt;/servlet-name&gt;<BR>&nbsp;&nbsp;&lt;url-pattern&gt;/ShowRequestHeaders&lt;/url-pattern&gt;<BR>&nbsp;&lt;/servlet-mapping&gt;<BR>&nbsp; &lt;filter&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;NtlmHttpFilter&lt;/filter-name&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;filter-class&gt;jcifs.http.NtlmHttpFilter&lt;/filter-class&gt;</P>
<P>&nbsp;&nbsp;&nbsp; &lt;init-param&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-name&gt;jcifs.http.domainController&lt;/param-name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param-value&gt;192.168.10.1&lt;/param-value&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/init-param&gt;<BR>&nbsp; &lt;/filter&gt;</P>
<P>&nbsp; &lt;filter-mapping&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;filter-name&gt;NtlmHttpFilter&lt;/filter-name&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<BR>&nbsp; &lt;/filter-mapping&gt;<BR>&nbsp;<BR>&lt;/web-app&gt;<BR><BR></P><img src ="http://www.blogjava.net/lmsun/aggbug/10484.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lmsun/" target="_blank">my java</a> 2005-08-19 11:06 <a href="http://www.blogjava.net/lmsun/archive/2005/08/19/10484.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Date类型变量加减天数</title><link>http://www.blogjava.net/lmsun/archive/2005/08/18/10422.html</link><dc:creator>my java</dc:creator><author>my java</author><pubDate>Thu, 18 Aug 2005 05:26:00 GMT</pubDate><guid>http://www.blogjava.net/lmsun/archive/2005/08/18/10422.html</guid><wfw:comment>http://www.blogjava.net/lmsun/comments/10422.html</wfw:comment><comments>http://www.blogjava.net/lmsun/archive/2005/08/18/10422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lmsun/comments/commentRss/10422.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lmsun/services/trackbacks/10422.html</trackback:ping><description><![CDATA[<P>//import java.text.*;<BR>//import java.util.*;</P>
<P>public static String addDate(String day,int x)<BR>&nbsp; {<BR>&nbsp;&nbsp;&nbsp; SimpleDateFormat format=new SimpleDateFormat("yyyy/MM/dd");<BR>&nbsp;&nbsp;&nbsp; Date date = null;<BR>&nbsp;&nbsp;&nbsp; try<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date = format.parse(day);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; catch (ParseException ex)<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex.printStackTrace();<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; if (date==null) return "";<BR>&nbsp;&nbsp;&nbsp; Calendar cal=Calendar.getInstance();<BR>&nbsp;&nbsp;&nbsp; cal.setTime(date);<BR>&nbsp;&nbsp;&nbsp; cal.add(Calendar.DAY_OF_MONTH,x);<BR>&nbsp;&nbsp;&nbsp; date=cal.getTime();<BR>&nbsp;&nbsp;&nbsp; System.out.println("3 days after(or before) is "+format.format(date));<BR>&nbsp;&nbsp;&nbsp; cal=null;<BR>&nbsp;&nbsp;&nbsp; return format.format(date);<BR>&nbsp; }<BR></P><img src ="http://www.blogjava.net/lmsun/aggbug/10422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lmsun/" target="_blank">my java</a> 2005-08-18 13:26 <a href="http://www.blogjava.net/lmsun/archive/2005/08/18/10422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>package编译</title><link>http://www.blogjava.net/lmsun/archive/2005/08/17/10319.html</link><dc:creator>my java</dc:creator><author>my java</author><pubDate>Wed, 17 Aug 2005 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/lmsun/archive/2005/08/17/10319.html</guid><wfw:comment>http://www.blogjava.net/lmsun/comments/10319.html</wfw:comment><comments>http://www.blogjava.net/lmsun/archive/2005/08/17/10319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lmsun/comments/commentRss/10319.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lmsun/services/trackbacks/10319.html</trackback:ping><description><![CDATA[<P>建目录coreservlets,将两个servlets放在这个目录中,在coreservlet的上级目录<BR>运行:<BR>javac coreservlets/HelloServlet3.java<BR><BR><BR><BR>package coreservlets;</P>
<P>import java.io.*;<BR>import javax.servlet.*;<BR>import javax.servlet.http.*;</P>
<P>/** Simple servlet for testing the use of packages<BR>&nbsp;*&nbsp; and utilities from the same package.<BR>&nbsp;*&nbsp; &lt;P&gt;<BR>&nbsp;*&nbsp; Taken from Core Servlets and JavaServer Pages 2nd Edition<BR>&nbsp;*&nbsp; from Prentice Hall and Sun Microsystems Press,<BR>&nbsp;*&nbsp; <A href="http://www.coreservlets.com/">http://www.coreservlets.com/</A>.<BR>&nbsp;*&nbsp; &amp;copy; 2003 Marty Hall; may be freely used or adapted.<BR>&nbsp;*/</P>
<P>public class HelloServlet3 extends HttpServlet {<BR>&nbsp; public void doGet(HttpServletRequest request,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletResponse response)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws ServletException, IOException {<BR>&nbsp;&nbsp;&nbsp; response.setContentType("text/html");<BR>&nbsp;&nbsp;&nbsp; PrintWriter out = response.getWriter();<BR>&nbsp;&nbsp;&nbsp; String title = "Hello (3)";<BR>&nbsp;&nbsp;&nbsp; out.println(ServletUtilities.headWithTitle(title) + <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;BODY BGCOLOR=\"#FDF5E6\"&gt;\n" +<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;H1&gt;" + title + "&lt;/H1&gt;\n" +<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;/BODY&gt;&lt;/HTML&gt;");<BR>&nbsp; }<BR>}<BR><BR><BR><BR><BR>package coreservlets;</P>
<P>import javax.servlet.*;<BR>import javax.servlet.http.*;</P>
<P>/** Some simple timesavers. Note that most are static methods.<BR>&nbsp;*&nbsp; &lt;P&gt;<BR>&nbsp;*&nbsp; Taken from Core Servlets and JavaServer Pages 2nd Edition<BR>&nbsp;*&nbsp; from Prentice Hall and Sun Microsystems Press,<BR>&nbsp;*&nbsp; <A href="http://www.coreservlets.com/">http://www.coreservlets.com/</A>.<BR>&nbsp;*&nbsp; &amp;copy; 2003 Marty Hall; may be freely used or adapted.<BR>&nbsp;*/</P>
<P>public class ServletUtilities {<BR>&nbsp; public static final String DOCTYPE =<BR>&nbsp;&nbsp;&nbsp; "&lt;!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +<BR>&nbsp;&nbsp;&nbsp; "Transitional//EN\"&gt;";</P>
<P>&nbsp; public static String headWithTitle(String title) {<BR>&nbsp;&nbsp;&nbsp; return(DOCTYPE + "\n" +<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;HTML&gt;\n" +<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;HEAD&gt;&lt;TITLE&gt;" + title + "&lt;/TITLE&gt;&lt;/HEAD&gt;\n");<BR>&nbsp; }</P>
<P>&nbsp; /** Read a parameter with the specified name, convert it<BR>&nbsp;&nbsp; *&nbsp; to an int, and return it. Return the designated default<BR>&nbsp;&nbsp; *&nbsp; value if the parameter doesn't exist or if it is an<BR>&nbsp;&nbsp; *&nbsp; illegal integer format.<BR>&nbsp; */<BR>&nbsp; <BR>&nbsp; public static int getIntParameter(HttpServletRequest request,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String paramName,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int defaultValue) {<BR>&nbsp;&nbsp;&nbsp; String paramString = request.getParameter(paramName);<BR>&nbsp;&nbsp;&nbsp; int paramValue;<BR>&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; paramValue = Integer.parseInt(paramString);<BR>&nbsp;&nbsp;&nbsp; } catch(NumberFormatException nfe) { // null or bad format<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; paramValue = defaultValue;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; return(paramValue);<BR>&nbsp; }</P>
<P>&nbsp; public static double getDoubleParameter<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (HttpServletRequest request,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String paramName,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double defaultValue) {<BR>&nbsp;&nbsp;&nbsp; String paramString = request.getParameter(paramName);<BR>&nbsp;&nbsp;&nbsp; double paramValue;<BR>&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; paramValue = Double.parseDouble(paramString);<BR>&nbsp;&nbsp;&nbsp; } catch(NumberFormatException nfe) { // null or bad format<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; paramValue = defaultValue;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; return(paramValue);<BR>&nbsp; }</P>
<P>&nbsp; /** Replaces characters that have special HTML meanings<BR>&nbsp;&nbsp; *&nbsp; with their corresponding HTML character entities.<BR>&nbsp;&nbsp; */<BR>&nbsp; <BR>&nbsp; // Note that Javadoc is not used for the more detailed<BR>&nbsp; // documentation due to the difficulty of making the<BR>&nbsp; // special chars readable in both plain text and HTML.<BR>&nbsp; //<BR>&nbsp; // Given a string, this method replaces all occurrences of<BR>&nbsp; //&nbsp; '&lt;' with '&amp;lt;', all occurrences of '&gt;' with<BR>&nbsp; //&nbsp; '&amp;gt;', and (to handle cases that occur inside attribute<BR>&nbsp; //&nbsp; values), all occurrences of double quotes with<BR>&nbsp; //&nbsp; '&amp;quot;' and all occurrences of '&amp;' with '&amp;amp;'.<BR>&nbsp; //&nbsp; Without such filtering, an arbitrary string<BR>&nbsp; //&nbsp; could not safely be inserted in a Web page.</P>
<P>&nbsp; public static String filter(String input) {<BR>&nbsp;&nbsp;&nbsp; if (!hasSpecialChars(input)) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(input);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; StringBuffer filtered = new StringBuffer(input.length());<BR>&nbsp;&nbsp;&nbsp; char c;<BR>&nbsp;&nbsp;&nbsp; for(int i=0; i&lt;input.length(); i++) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c = input.charAt(i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch(c) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '&lt;': filtered.append("&amp;lt;"); break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '&gt;': filtered.append("&amp;gt;"); break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '"': filtered.append("&amp;quot;"); break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '&amp;': filtered.append("&amp;amp;"); break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default: filtered.append(c);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; return(filtered.toString());<BR>&nbsp; }</P>
<P>&nbsp; private static boolean hasSpecialChars(String input) {<BR>&nbsp;&nbsp;&nbsp; boolean flag = false;<BR>&nbsp;&nbsp;&nbsp; if ((input != null) &amp;&amp; (input.length() &gt; 0)) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char c;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0; i&lt;input.length(); i++) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c = input.charAt(i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch(c) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '&lt;': flag = true; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '&gt;': flag = true; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '"': flag = true; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '&amp;': flag = true; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; return(flag);<BR>&nbsp; }<BR>}</P>
<P>&nbsp;</P><img src ="http://www.blogjava.net/lmsun/aggbug/10319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lmsun/" target="_blank">my java</a> 2005-08-17 11:34 <a href="http://www.blogjava.net/lmsun/archive/2005/08/17/10319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中定时器timer类的实现和源代码</title><link>http://www.blogjava.net/lmsun/archive/2005/07/26/8452.html</link><dc:creator>my java</dc:creator><author>my java</author><pubDate>Tue, 26 Jul 2005 01:00:00 GMT</pubDate><guid>http://www.blogjava.net/lmsun/archive/2005/07/26/8452.html</guid><wfw:comment>http://www.blogjava.net/lmsun/comments/8452.html</wfw:comment><comments>http://www.blogjava.net/lmsun/archive/2005/07/26/8452.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/lmsun/comments/commentRss/8452.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lmsun/services/trackbacks/8452.html</trackback:ping><description><![CDATA[<P>在Windows编程中可以调用SetTimer在指定窗口安装定时器(Timer)，定时器可以在指定的时间间隔周期性回调用户指定的方法，用来执行周期性的任务，如果想取消定时器，可以调用KillTimer取消。但是在java标准包里中并没有这种类。下面介绍的这个类包可以实现上述功能。</P>
<P>下面是接口，需要支持定时器功能的类要实现这个接口：</P>
<P>TimerClient.java </P>
<P>package com.ly.util;</P>
<P>/**<BR>&nbsp;* TimerClient Interface<BR>&nbsp;*<BR>&nbsp;* @version 1.0, 8 October 1995<BR>&nbsp;*<BR>&nbsp;*/<BR>public interface TimerClient<BR>{<BR>&nbsp; void timerEvent(int id);<BR>}</P>
<P>&nbsp;</P>
<P>下面是定时器的实现，包括三个类：TimerCtl,TimerTask,TimerTasks。其中TimerTask用来描述定时器信息。TimerTasks是一个TimerTask的列表，这样我们就可以同时在一个应用中安插多个定时器。TimerCtl是定时器控制类，是个线程，不停地检查TimerTasks中是否有TimerTask到期，要是有TimerTask到达指定的时间，则回调TimerTask指定的TimerClient的timerEvent接口。</P>
<P>TimerCtl.java </P>
<P>package com.ly.util;</P>
<P>import java.util.Vector;<BR>import java.util.Enumeration;<BR>//import com.borland.jb.util.Diagnostic;</P>
<P>/**<BR>&nbsp;* Timer Component<BR>&nbsp;*<BR>&nbsp;* Note:<BR>&nbsp;*&nbsp; - The successful operation of this timer requires clients to execute simple, short<BR>&nbsp;*&nbsp;&nbsp;&nbsp; code snippets when called back by the engine.&nbsp; Otherwise the queue's delivery<BR>&nbsp;*&nbsp;&nbsp;&nbsp; mechanism will be held up<BR>&nbsp;*<BR>&nbsp;* Further work:<BR>&nbsp;*&nbsp; - When Thread.Interrupt is implemented we can switch from the busy wait model to<BR>&nbsp;*&nbsp;&nbsp;&nbsp; the calculated wait model.&nbsp; Without the interrupt the thread waits for the<BR>&nbsp;*&nbsp;&nbsp;&nbsp; calculated interval before waking up.&nbsp; This is a problem if another shorter<BR>&nbsp;*&nbsp;&nbsp;&nbsp; request arrives.&nbsp; For now we'll assume the minimum resolution of the timer is<BR>&nbsp;*&nbsp;&nbsp;&nbsp; 100ms.<BR>&nbsp;*<BR>&nbsp;* @version 1.0, 2 October 1995<BR>&nbsp;*<BR>&nbsp;*/<BR>public class TimerCtl<BR>{<BR>&nbsp; static TimerTasks timerTasks;</P>
<P>&nbsp; public TimerCtl() {<BR>&nbsp; }</P>
<P>&nbsp; /*<BR>&nbsp; * Start a timer running<BR>&nbsp; */<BR>&nbsp; public static void startTimer(TimerClient client, int eventId, long delay, boolean repeat) {<BR>&nbsp;&nbsp;&nbsp; // create the timer if necessary<BR>&nbsp;&nbsp;&nbsp; if (timerTasks == null) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timerTasks = new TimerTasks();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timerTasks.start();<BR>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp; //Diagnostic.out.println("TIMER: startTimer"+eventId);</P>
<P>&nbsp;&nbsp;&nbsp; // add the new task to the queue<BR>&nbsp;&nbsp;&nbsp; timerTasks.add(client, eventId, delay, repeat);<BR>&nbsp; }</P>
<P>&nbsp; /*<BR>&nbsp; * Stop a timer<BR>&nbsp; */<BR>&nbsp; public static void stopTimer(TimerClient client, int eventId) {<BR>&nbsp;&nbsp;&nbsp; //Diagnostic.out.println("TIMER: stopTimer"+eventId);<BR>&nbsp;&nbsp;&nbsp; if(timerTasks != null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timerTasks.end(client, eventId);<BR>&nbsp; }<BR>}</P>
<P>class TimerTasks extends Thread<BR>{<BR>&nbsp; Vector tasks = new Vector();<BR>&nbsp; boolean suspended = false;<BR>&nbsp; boolean sleeping = false;</P>
<P>&nbsp; /**<BR>&nbsp;&nbsp; * Thread task runner<BR>&nbsp;&nbsp; */<BR>&nbsp; public void run() {<BR>&nbsp;&nbsp;&nbsp; // Loop forever<BR>&nbsp;&nbsp;&nbsp; while (true) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; long sleepTime = 0;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Ensure that the tasks class is protected<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synchronized (tasks) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Diagnostic.out.println("TIMER: Tick");</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Scan the job list for any jobs which may fire.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Mark one-shot jobs for deletion<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Calculate the maximum time we can sleep for<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleepTime = scan();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Delete DeletePending jobs.&nbsp; DeletePending jobs result from one-shots which have<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // been sent, and repeat jobs which have been cancelled.&nbsp; Jobs may have been<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // cancelled during the Scan process.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; purge();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Suspend timer if necessary<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (tasks.size() == 0) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Diagnostic.out.println("TIMER: Suspend");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synchronized(this) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suspended = true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; wait();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (InterruptedException e) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Diagnostic.out.println("TIMER: Suggested Sleeping for "+sleepTime);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (sleepTime &gt;= 0) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleeping = true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep(sleepTime);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleeping = false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (InterruptedException i) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Diagnostic.out.println("TIMER: Caught me napping");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }</P>
<P>&nbsp; /**<BR>&nbsp;&nbsp; * Add a new task<BR>&nbsp;&nbsp; */<BR>&nbsp; public void add(TimerClient client, int eventId, long delay, boolean repeat) {<BR>&nbsp;&nbsp;&nbsp; TimerTask t = new TimerTask(client, eventId, delay, repeat);</P>
<P>&nbsp;&nbsp;&nbsp; synchronized (tasks) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tasks.addElement((Object)t);<BR>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp; // Want instant response - wake the thread if it's napping<BR>&nbsp;&nbsp;&nbsp; // unfortunately the interrupt() method is not working<BR>//&nbsp;&nbsp;&nbsp; if (sleeping)<BR>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; interrupt();</P>
<P>&nbsp;&nbsp;&nbsp; if (suspended) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; synchronized(this) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; notify();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Diagnostic.out.println("TIMER: Resume");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suspended = false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }</P>
<P>&nbsp; /**<BR>&nbsp;&nbsp; * Find the job and mark it for deletion<BR>&nbsp;&nbsp; */<BR>&nbsp; public void end(TimerClient client, int eventId) {<BR>&nbsp;&nbsp;&nbsp; synchronized (tasks) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; tasks.size(); i++) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimerTask t = (TimerTask)tasks.elementAt(i);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //if (!t.deletePending &amp;&amp; t.client == client &amp;&amp; t.eventId == eventId)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (t.deletePending == false &amp;&amp; t.client == client &amp;&amp; t.eventId == eventId) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // JPBS - if we don't reset 'repeat', deletePending will be set again<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.repeat = false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.deletePending = true;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }</P>
<P>&nbsp; /**<BR>&nbsp;&nbsp; * Clear out all the dead wood<BR>&nbsp;&nbsp; */<BR>&nbsp; void purge() {<BR>&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; tasks.size(); i++) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimerTask t = (TimerTask)tasks.elementAt(i);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (t.deletePending) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Diagnostic.out.println("TIMER: purged");</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tasks.removeElementAt(i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i--;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }</P>
<P>&nbsp; long scan() {<BR>&nbsp;&nbsp;&nbsp; // The value added to the current time determines the MAX time until<BR>&nbsp;&nbsp;&nbsp; // the next scan<BR>&nbsp;&nbsp;&nbsp; // This is 100 now since thread.interrupt() is not implemented<BR>&nbsp;&nbsp;&nbsp; long nextTime = System.currentTimeMillis() + 100;</P>
<P>&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; tasks.size(); i++) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimerTask t = (TimerTask)tasks.elementAt(i);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // if not already deletePending, test (and possibly send the event)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // as a result, the job may be flagged for deletion.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // May also be a non-repeating job and so require self deletion<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!t.deletePending)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.test();</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // if the task didn't get deleted - see what it contributes to the time<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!t.deletePending)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nextTime = Math.min(nextTime, t.timeNext);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Diagnostic.out.println("TIMER: Scanning "+t.eventId+" "+(t.deletePending == true ? "DEL" : ""));<BR>&nbsp;&nbsp;&nbsp; }</P>
<P>&nbsp;&nbsp;&nbsp; return nextTime - System.currentTimeMillis();<BR>&nbsp; }<BR>}</P>
<P>class TimerTask<BR>{<BR>&nbsp; TimerClient client;<BR>&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eventId;</P>
<P>&nbsp; long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timePrev;<BR>&nbsp; long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeDelay;<BR>&nbsp; long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeNext;</P>
<P>&nbsp; boolean repeat;<BR>&nbsp; boolean deletePending;</P>
<P>&nbsp; public TimerTask(TimerClient client, int eventId, long timeDelay, boolean repeat) {<BR>&nbsp;&nbsp;&nbsp; this.client = client;<BR>&nbsp;&nbsp;&nbsp; this.eventId = eventId;<BR>&nbsp;&nbsp;&nbsp; this.timeDelay = timeDelay;<BR>&nbsp;&nbsp;&nbsp; this.repeat = repeat;</P>
<P>&nbsp;&nbsp;&nbsp; // schedule the next click - now + delay<BR>&nbsp;&nbsp;&nbsp; timeNext = System.currentTimeMillis() + timeDelay;<BR>&nbsp;&nbsp;&nbsp; deletePending = false;</P>
<P>&nbsp;&nbsp;&nbsp; //Diagnostic.out.println("TIMER: Adding New Task");<BR>&nbsp; }</P>
<P>&nbsp; public void test() {<BR>&nbsp;&nbsp;&nbsp; if (System.currentTimeMillis() &gt;= timeNext) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Diagnostic.out.println("TIMER: fire");</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Fire the event<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client.timerEvent(eventId);</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Update the next time<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeNext = System.currentTimeMillis() + timeDelay;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deletePending = !repeat;<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp; }<BR>}</P>
<P>&nbsp;</P>
<P>　<BR>下面是一个使用例子 </P>
<P>TimerTest.java </P>
<P>package com.ly.util;</P>
<P>import java.io.*;<BR>import java.util.*;<BR>import com.ly.util.*;</P>
<P>/**<BR>* Title: <BR>* Description:<BR>* Copyright: Copyright (c) 2001<BR>* Company: <A href="http://dozb.blogchina.com">http://dozb.blogchina.com</A><BR>* @author dozb<BR>* @version 1.0<BR>*/<BR>public class TimerTest implements TimerClient{<BR>public TimerTest()<BR>{<BR>starttime();<BR>}<BR>public void timerEvent(int id)<BR>{<BR>System.out.println("timerEvent...");<BR>}<BR>public void starttime()<BR>{<BR>TimerCtl.startTimer(this,1,5*1000,true);<BR>}<BR>public void stoptime()<BR>{<BR>TimerCtl.stopTimer(this,1);<BR>}</P>
<P>public static void main(String[] args) <BR>{<BR>new TimerTest();<BR>try<BR>{<BR>Thread.sleep(200000);<BR>}catch(Exception e)<BR>{<BR>}</P>
<P>}<BR>}</P>
<P>&nbsp;</P>
<P>通过这种方式，可以高效地使用socket通讯，在异步socket版本没有发布以前，不失是一种解决问题的方法。:)<BR></P><img src ="http://www.blogjava.net/lmsun/aggbug/8452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lmsun/" target="_blank">my java</a> 2005-07-26 09:00 <a href="http://www.blogjava.net/lmsun/archive/2005/07/26/8452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>