﻿<?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-&lt;h3 style="font-family: Comic Sans MS"&gt;&lt;font color="#FA1A0A" size="10"&gt;︻┳═一Java&lt;/font&gt;&lt;/h3&gt;-文章分类-Java</title><link>http://www.blogjava.net/rain1102/category/14838.html</link><description>&lt;b&gt;&lt;font color="#3C1435"&gt;08年奋斗目标：&lt;/font&gt;&lt;font color="#F70E0A"&gt;赚钱买个房子！&lt;/font&gt;&lt;/b&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 07 May 2008 02:52:47 GMT</lastBuildDate><pubDate>Wed, 07 May 2008 02:52:47 GMT</pubDate><ttl>60</ttl><item><title>Commons-Validator</title><link>http://www.blogjava.net/rain1102/articles/198893.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 07 May 2008 02:50:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/198893.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/198893.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/198893.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/198893.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/198893.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Commons-Validator（一）&nbsp;&nbsp;&nbsp;&nbsp;Commons-Validator包用来把验证规则程序提取出来，以供重复使用。这个包可以使用在Struts中，也可以独立的应用在任何其它的应用中。用户可以通过Java类的方式自定义验证方法，也可以在配置文件中通过正则表达式配置验证方法。它不但支持服务器端的验证，客户端的验证也支持，具体需要使用tag把相...&nbsp;&nbsp;<a href='http://www.blogjava.net/rain1102/articles/198893.html'>阅读全文</a><img src ="http://www.blogjava.net/rain1102/aggbug/198893.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-05-07 10:50 <a href="http://www.blogjava.net/rain1102/articles/198893.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中annotation实例</title><link>http://www.blogjava.net/rain1102/articles/197535.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 30 Apr 2008 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/197535.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/197535.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/197535.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/197535.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/197535.html</trackback:ping><description><![CDATA[<span style="color: #008000">
<p><strong style="color: #000000">编写Annotation：<br />
</strong><br />
package com.eric.news.cha06;</p>
<p>import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.annotation.Documented;<br />
import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.annotation.Inherited;<br />
import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.annotation.Retention;<br />
import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.annotation.RetentionPolicy;</p>
<p>@Documented<br />
@Inherited<br />
@Retention(RetentionPolicy.RUNTIME)<br />
public @interface GroupTODO {</p>
<p>&nbsp;public enum Severity {CRITICAL, IMPORTANT, TRIVIAL, DOCUMENTATION};<br />
&nbsp;Severity severity() default Severity.IMPORTANT;<br />
&nbsp;String item();<br />
&nbsp;String assignedTo();<br />
}<br />
</p>
<p><span style="color: #000000">－－－－－－－－－－－－－－－－－－－－－</span><br />
<span style="color: #000000"><strong>运用annotation：<br />
</strong></span><br />
package com.eric.news.cha06;</span></p>
<p><span style="color: #008000">@InProgress<br />
public class TestInProgress {</span></p>
<p><span style="color: #008000">&nbsp;@GroupTODO(<br />
&nbsp;&nbsp;&nbsp;severity=GroupTODO.Severity.CRITICAL,<br />
&nbsp;&nbsp;&nbsp;item="Figure out the amount of interest per month",<br />
&nbsp;&nbsp;&nbsp;assignedTo="Eric Zhou"<br />
&nbsp;)<br />
&nbsp;public void calculateInterest(float amount, float rate) {<br />
&nbsp;&nbsp;<br />
&nbsp;}<br />
}</span><br />
<br />
<span style="color: #000000"><span style="color: #000000">－－－－－－－－－－－－－－－－－－－－－<br />
<br />
<strong>测试：</strong></p>
<p><span style="color: #008000">package com.eric.news.cha06;</span></p>
<p><span style="color: #008000">import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.reflect.Method;</span></p>
<p><span style="color: #008000">public class TestAnnotation {</span></p>
<p><br />
<span style="color: #008000">&nbsp;public static void main(String[] args) throws SecurityException, NoSuchMethodException {<br />
&nbsp;&nbsp;Class c = TestInProgress.class;<br />
&nbsp;&nbsp;Method element = c.getMethod("calculateInterest", float.class, float.class);<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;GroupTODO groupTodo = element.getAnnotation(GroupTODO.class);<br />
&nbsp;&nbsp;String assignedTo = groupTodo.assignedTo();<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;System.out.println(assignedTo);<br />
&nbsp;&nbsp;System.out.println(groupTodo.item());</span></p>
<p><span style="color: #008000">&nbsp;}</span></p>
<p><span style="color: #008000">}<br />
</span></p>
<p></span></span><br />
<span style="color: #000000"><span style="color: #000000">－－－－－－－－－－－－－－－－－－－－－</span></span><br />
<strong>结果：<br />
</strong><span style="color: #008000">Eric Zhou<br />
Figure out the amount of interest per month</span><br />
<br />
</p><img src ="http://www.blogjava.net/rain1102/aggbug/197535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-30 15:25 <a href="http://www.blogjava.net/rain1102/articles/197535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>协变返回(covariant return)</title><link>http://www.blogjava.net/rain1102/articles/194900.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 22 Apr 2008 14:45:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/194900.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/194900.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/194900.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/194900.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/194900.html</trackback:ping><description><![CDATA[<p>在Java1.4及以前，子类方法如果要覆盖超类的某个方法，必须具有完全相同的方法签名，包括返回值也必须完全一样。<br />
Java5.0放宽了这一限制，只要子类方法与超类方法具有相同的方法签名，或者子类方法的返回值是超类方法的子类型，就可以覆盖。<br />
注意："协变返回(covariant return)"，仅在subclass的返回类型是superclass返回类型的extension时才被容许。<br />
&nbsp;</p>
<p>package com.eric.news;</p>
<p>public class Point2D {</p>
<p>&nbsp;protected int x, y;<br />
&nbsp;<br />
&nbsp;public Point2D() {<br />
&nbsp;&nbsp;this.x = 0;<br />
&nbsp;&nbsp;this.y = 0;<br />
&nbsp;}<br />
&nbsp;public Point2D(int x, int y) {<br />
&nbsp;&nbsp;this.x = x;<br />
&nbsp;&nbsp;this.y = y;<br />
&nbsp;}<br />
&nbsp;<br />
}<br />
<br />
<br />
</p>
<p>package com.eric.news;</p>
<p>public class Point3D extends Point2D {</p>
<p>&nbsp;protected int z;<br />
&nbsp;<br />
&nbsp;public Point3D(int x, int y) {<br />
&nbsp;&nbsp;this(x, y, 0);<br />
&nbsp;}<br />
&nbsp;public Point3D(int x, int y, int z) {<br />
&nbsp;&nbsp;this.x = x;<br />
&nbsp;&nbsp;this.y = y;<br />
&nbsp;&nbsp;this.z = z;<br />
&nbsp;}<br />
}<br />
</p>
<p><br />
<br />
</p>
<p>package com.eric.news;</p>
<p>public class Position2D {<br />
&nbsp;Point2D location;<br />
&nbsp;<br />
&nbsp;public Position2D() {<br />
&nbsp;&nbsp;this.location = new Point2D();<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public Position2D(int x, int y) {<br />
&nbsp;&nbsp;this.location = new Point2D(x, y);<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public Point2D getLocation() {<br />
&nbsp;&nbsp;return location;<br />
&nbsp;}<br />
}<br />
<br />
<br />
</p>
<p>package com.eric.news;</p>
<p>public class Position3D extends Position2D {</p>
<p>&nbsp;Point3D location;<br />
&nbsp;<br />
&nbsp;public Position3D(int x, int y, int z) {<br />
&nbsp;&nbsp;this.location = new Point3D(x, y, z);<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public Point3D getLocation() {<br />
&nbsp;&nbsp;return location;<br />
&nbsp;}<br />
}<br />
</p><img src ="http://www.blogjava.net/rain1102/aggbug/194900.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-22 22:45 <a href="http://www.blogjava.net/rain1102/articles/194900.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java.lang.NoSuchFieldError: TRACE :Log4j</title><link>http://www.blogjava.net/rain1102/articles/193843.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 17 Apr 2008 11:05:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/193843.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/193843.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/193843.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/193843.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/193843.html</trackback:ping><description><![CDATA[<span class="postbody">Hi I am facing a problem with accessing the JBOSS. <br />
<br />
according to the exception it seems to me --- log related exception. <br />
<br />
when I call the following code <br />
<br />
</span>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>Code:</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <pre>Hashtable env = new Hashtable();
            env.put(Context.INITIAL_CONTEXT_FACTORY, initCtxFac);
            env.put(Context.PROVIDER_URL, providerUrl);
            try {
            ctx = new InitialContext(env);
            conFactory = (QueueConnectionFactory) ctx.lookup
            (queueConFacLookupName);
            -----
            -----	</pre>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
exception details <br />
<br />
</span>
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>Code:</strong></span></td>
        </tr>
        <tr>
            <td class="code">
            <pre>Exception in thread "main" <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.NoSuchFieldError: TRACE
            at org.jboss.logging.Log4jLoggerPlugin.isTraceEnabled(Log4jLoggerPlugin.java:85)
            at org.jboss.logging.Logger.isTraceEnabled(Logger.java:122)
            at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:622)
            at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:589)
            at javax.naming.InitialContext.lookup(InitialContext.java:351)
            at com.cognizant.util.ServiceHelper.initQueueService(ServiceHelper.java:153)
            at com.cognizant.main.StartUp.&lt;init&gt;(StartUp.java:28)
            at com.cognizant.main.StartUp.main(StartUp.java:46)	</pre>
            </td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
<br />
I use jboss-4.2.1.GA version with JDK jdk141_05 version. <br />
<br />
I added jboss.jar,jbossall-client.jar,jboss-client.jar,jboss-system.jar,log4j-1.2.9.jar,log4j-boot.jar in my project library. <br />
<br />
Strange thing is that I run this same code with all other 3/4 windows XP system. OK <br />
<br />
But in another system with the same configuration I got the above mentioned exception. <br />
<br />
<br />
Can any body help me? <br />
<br />
-----------------------------------------------------------------------------------------<br />
<table cellspacing="1" cellpadding="3" width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td><span class="genmed"><strong>Quote:</strong></span></td>
        </tr>
        <tr>
            <td class="quote">Exception in thread "main" <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.lang.NoSuchFieldError: TRACE</td>
        </tr>
    </tbody>
</table>
<span class="postbody"><br />
<br />
You will require log4j jar of version 1.2.12 or higher in your classpath. Also, make sure that you do <span style="font-style: italic">not</span> maintain more than one version of jar file of log4j (or for that matter any other utility) in the classpath. So remove the log4j-1.2.9.jar and log4j-boot.jar from your client's classpath and include a log4j jar of version 1.2.12 or higher. <br />
</span><br />
</span><img src ="http://www.blogjava.net/rain1102/aggbug/193843.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-17 19:05 <a href="http://www.blogjava.net/rain1102/articles/193843.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用JAVA对象比较器Comparator</title><link>http://www.blogjava.net/rain1102/articles/193559.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 16 Apr 2008 12:47:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/193559.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/193559.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/193559.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/193559.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/193559.html</trackback:ping><description><![CDATA[需求：公司要将员工进行排序（不要说领导排在前面），我们的需求比较复杂。先进行姓排序，谁的姓拼音靠前，谁就排前面。然后对名字进行排序。恩.如果同名，女性排前头。如果名字和性别都相同，年龄小的排前头。<br />
代码如下：<br />
<br />
<strong>Person.java</strong><br />
<p><span style="color: #008000">package com.founder.common;</span></p>
<p><span style="color: #008000">public class Person {<br />
&nbsp;private String firstName;<br />
&nbsp;private String lastName;<br />
&nbsp;private boolean sex;<br />
&nbsp;private int age;</span></p>
<p><span style="color: #008000">&nbsp;public Person(String firstName, String lastName, boolean sex, int age) {<br />
&nbsp;&nbsp;this.firstName = firstName;<br />
&nbsp;&nbsp;this.lastName = lastName;<br />
&nbsp;&nbsp;this.sex = sex;<br />
&nbsp;&nbsp;this.age = age;<br />
&nbsp;}<br />
&nbsp;public int getAge() {<br />
&nbsp;&nbsp;return age;<br />
&nbsp;}<br />
&nbsp;public void setAge(int age) {<br />
&nbsp;&nbsp;this.age = age;<br />
&nbsp;}<br />
&nbsp;public String getFirstName() {<br />
&nbsp;&nbsp;return firstName;<br />
&nbsp;}<br />
&nbsp;public void setFirstName(String firstName) {<br />
&nbsp;&nbsp;this.firstName = firstName;<br />
&nbsp;}<br />
&nbsp;public String getLastName() {<br />
&nbsp;&nbsp;return lastName;<br />
&nbsp;}<br />
&nbsp;public void setLastName(String lastName) {<br />
&nbsp;&nbsp;this.lastName = lastName;<br />
&nbsp;}<br />
&nbsp;public boolean getSex() {<br />
&nbsp;&nbsp;return sex;<br />
&nbsp;}<br />
&nbsp;public void setSex(boolean sex) {<br />
&nbsp;&nbsp;this.sex = sex;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public String toString() {<br />
&nbsp;&nbsp;return firstName + " " + lastName + " " + (sex ? "Male" : "Female") + " " + age;<br />
&nbsp;}<br />
}<br />
<br />
<strong><span style="color: #000000"><strong>Comparator.java</strong></span><br />
</strong></p>
<p><span style="color: #008000">package com.founder.common;</span></p>
<p><span style="color: #008000">public class Comparator{<br />
&nbsp;public static <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Comparator getComparator() {<br />
&nbsp;&nbsp;return new <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.util.Comparator() {<br />
&nbsp;&nbsp;&nbsp;public int compare(Object o1, Object o2) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (o1 instanceof String) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return compare((String) o1, (String) o2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if (o1 instanceof Integer) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return compare((Integer) o1, (Integer) o2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if (o1 instanceof Person) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return compare((Person) o1, (Person) o2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println("未找到适合的比较器");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public int compare(String o1, String o2) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;int len1 = o1.length();<br />
&nbsp;&nbsp;&nbsp;&nbsp;int len2 = o2.length();<br />
&nbsp;&nbsp;&nbsp;&nbsp;int n = Math.min(len1, len2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;char v1[] = o1.toCharArray();<br />
&nbsp;&nbsp;&nbsp;&nbsp;char v2[] = o2.toCharArray();<br />
&nbsp;&nbsp;&nbsp;&nbsp;int pos = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (n-- != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char c1 = v1[pos];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char c2 = v2[pos];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (c1 != c2) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return c1 - c2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;return len1 - len2;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public int compare(Integer o1, Integer o2) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int val1 = o1.intValue();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int val2 = o2.intValue();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (val1 &lt; val2 ? -1 : (val1 == val2 ? 0 : 1));&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public int compare(boolean o1, boolean o2) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;return (o1 == o2 ? 0 : (o1 == true ? 1: -1));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public int compare(Person o1, Person o2) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;String firstname1 = o1.getFirstName();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String firstname2 = o2.getFirstName();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String lastname1 = o1.getLastName();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String lastname2 = o2.getLastName();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean sex1 = o1.getSex();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean sex2 = o2.getSex();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int age1 = o1.getAge();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int age2 = o2.getAge();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (compare(firstname1, firstname2) == 0 ? <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;(compare(lastname1, lastname2) == 0 ? (compare(sex1, sex2) == 0 ? (compare(age1, age2) == 0 ? 0 :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;compare(age1, age2)) :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;compare(sex1, sex2)) :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;compare(lastname1, lastname2)) :<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;compare(firstname1, firstname2));<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;};<br />
&nbsp;}<br />
}<br />
<br />
<span style="color: #000000"><strong>PersonTest.java</strong><br />
</span></p>
<p>package com.founder.common;</p>
<p>public class PersonTest {</p>
<p>&nbsp;public static void main(String[] args) {<br />
&nbsp;&nbsp;Person[] person = new Person[] {<br />
&nbsp;&nbsp;&nbsp;&nbsp;new Person("ouyang", "feng", true, 25),<br />
&nbsp;&nbsp;&nbsp;&nbsp;new Person("zhuang", "gw", false, 36),<br />
&nbsp;&nbsp;&nbsp;&nbsp;new Person("zhuang", "gw", true, 36),<br />
&nbsp;&nbsp;&nbsp;&nbsp;new Person("zhuang", "gw", true, 33), <br />
&nbsp;&nbsp;&nbsp;&nbsp;new Person("zhuang", "gw", false, 23),<br />
&nbsp;&nbsp;&nbsp;&nbsp;new Person("yang", "gw", true, 43)};<br />
&nbsp;&nbsp;for (int i = 0; i &lt; person.length; i++) {<br />
&nbsp;&nbsp;&nbsp;System.out.println("before sort=" + person[i]);<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;java.util.Arrays.sort(person, Comparator.getComparator());</p>
<p>&nbsp;&nbsp;System.out.println("*************************************");<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;for (int i = 0; i &lt; person.length; i++) {<br />
&nbsp;&nbsp;&nbsp;System.out.println("after sort=" + person[i]);<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;}</p>
<p>}<br />
</p>
<p><br />
<strong style="color: #000000">输出结果为：</strong><br />
before sort=ouyang feng Male 25<br />
before sort=zhuang gw Female 36<br />
before sort=zhuang gw Male 36<br />
before sort=zhuang gw Male 33<br />
before sort=zhuang gw Female 23<br />
before sort=yang gw Male 43<br />
*************************************<br />
after sort=ouyang feng Male 25<br />
after sort=yang gw Male 43<br />
after sort=zhuang gw Female 23<br />
after sort=zhuang gw Female 36<br />
after sort=zhuang gw Male 33<br />
after sort=zhuang gw Male 36<br />
</span></p>
</span><img src ="http://www.blogjava.net/rain1102/aggbug/193559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-16 20:47 <a href="http://www.blogjava.net/rain1102/articles/193559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDK常用命令详解</title><link>http://www.blogjava.net/rain1102/articles/192911.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 14 Apr 2008 12:48:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/192911.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/192911.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/192911.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/192911.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/192911.html</trackback:ping><description><![CDATA[JDK的命令详解（1）<br />
<br />
功能说明：&nbsp;<br />
rmic&nbsp;为远程对象生成&nbsp;stub&nbsp;和&nbsp;skeleton。&nbsp;<br />
语法：&nbsp;<br />
rmic&nbsp;[&nbsp;options&nbsp;]&nbsp;package-qualified-class-name(s)&nbsp;<br />
补充说明：&nbsp;<br />
rmic&nbsp;编译器根据编译后的&nbsp;Java&nbsp;类（含有远程对象实现）名，为远程对象生成&nbsp;stub&nbsp;和&nbsp;skeleton（远程对象是指实现&nbsp;java.rmi.Remote&nbsp;接口的对象）。在&nbsp;rmic&nbsp;命令中所给的类必须是经&nbsp;javac&nbsp;命令成功编译且是完全包限定的类。&nbsp;<br />
命令选项&nbsp;<br />
-classpath[路径]&nbsp;指定&nbsp;rmic&nbsp;用于查询类的路径。如果设置了该选项，它将覆盖缺省值或&nbsp;CLASSPATH&nbsp;环境变量。目录用冒号分隔。&nbsp;<br />
-d[目录]&nbsp;指定类层次的根目录。此选项可用来指定&nbsp;stub&nbsp;和&nbsp;skeleton&nbsp;文件的目标目录。&nbsp;<br />
-depend&nbsp;使编译器考虑重新编译从其它类引用的类。&nbsp;一般来说，它只重新编译从源代码引用的遗漏或过期的类。&nbsp;<br />
-g&nbsp;允许生成调试表格。调试表格含有行号和局部变量的有关信息，即&nbsp;Java&nbsp;调试工具所使用的信息。缺省情况下，只生成行号。&nbsp;<br />
-J&nbsp;与&nbsp;-D&nbsp;选项联用，它将紧跟其后的选项（&nbsp;-J&nbsp;与&nbsp;-D&nbsp;之间无空格）传给&nbsp;java&nbsp;解释器。&nbsp;<br />
-keepgenerated&nbsp;为&nbsp;stub&nbsp;和&nbsp;skeleton&nbsp;文件保留所生成的&nbsp;.java&nbsp;源文件，并将这些源文件写到与&nbsp;.class&nbsp;文件相同的目录中，如果要指定目录，则使用&nbsp;-d&nbsp;选项。&nbsp;<br />
-nowarn&nbsp;关闭警告。如果使用该选项，则编译器不输出任何警告信息。&nbsp;<br />
-show&nbsp;显示&nbsp;rmic&nbsp;编译器的&nbsp;GUI（图形用户界面）。输入一个或多个包限定类名（以空格分隔），并按回车键或&#8220;显示&#8221;按钮，创建&nbsp;stub&nbsp;和&nbsp;skeleton。&nbsp;<br />
-vcompat&nbsp;（缺省值）创建与&nbsp;JDK&nbsp;1.1&nbsp;和&nbsp;1.2&nbsp;stub&nbsp;协议版本都兼容的&nbsp;stub&nbsp;和&nbsp;skeleton。&nbsp;<br />
-verbose&nbsp;使编译器和链接器输出关于正在编译哪些类和正在加载哪些类文件的信息。&nbsp;<br />
-v1.1&nbsp;创建&nbsp;JDK&nbsp;1.1&nbsp;stub&nbsp;协议版本的&nbsp;stub&nbsp;和&nbsp;skeleton。&nbsp;<br />
-v1.2&nbsp;只创建&nbsp;JDK&nbsp;1.2&nbsp;stub&nbsp;协议版本的&nbsp;stub。&nbsp;<br />
<br />
rmid&nbsp;<br />
<br />
功能说明：&nbsp;<br />
rmid&nbsp;启动激活系统守护进程，以便能够在&nbsp;Java&nbsp;虚拟机上注册和激活对象。&nbsp;<br />
语法：&nbsp;<br />
rmid&nbsp;[-port&nbsp;port]&nbsp;[-log&nbsp;dir]&nbsp;<br />
补充说明：&nbsp;<br />
rmid&nbsp;工具启动激活系统守护进程。必须先启动激活系统守护进程，才能向激活系统注册可被激活的对象或在&nbsp;Java&nbsp;虚拟机上激活可被激活的对象。&nbsp;<br />
命令选项&nbsp;<br />
-C&lt;某些命令行选项&gt;&nbsp;指定一个选项，在创建每个&nbsp;rmid&nbsp;的子守护进程（激活组）时，该选项以命令行参数的形式传给该子守护进程。&nbsp;<br />
-log[目录]&nbsp;指定目录的名称，激活系统守护进程在该目录中写入其数据库及相关信息。缺省状态下，将在执行&nbsp;rmid&nbsp;命令的目录中创建一个&nbsp;log&nbsp;目录。&nbsp;<br />
-port[端口]&nbsp;指定&nbsp;rmid&nbsp;的注册服务程序所使用的端口。激活系统守护进程将&nbsp;ActivationSystem&nbsp;与该注册服务程序中的名称java.rmi.activation.ActivationSystem&nbsp;捆绑在一起。&nbsp;<br />
-stop&nbsp;停止&nbsp;-port&nbsp;选项所指定端口上的当前&nbsp;rmid&nbsp;调用。若未指定端口，则将停止在端口&nbsp;1098&nbsp;上运行的&nbsp;rmid。&nbsp;<br />
<br />
rmiregistry&nbsp;<br />
<br />
功能说明：&nbsp;<br />
rmiregistry&nbsp;命令可在当前主机的指定端口上启动远程对象注册服务程序。&nbsp;<br />
语法：&nbsp;<br />
rmiregistry&nbsp;[port]&nbsp;<br />
补充说明：&nbsp;<br />
rmiregistry&nbsp;命令在当前主机的指定&nbsp;port&nbsp;上创建并启动远程对象注册服务程序。如果省略&nbsp;port，则注册服务程序将在&nbsp;1099&nbsp;端口上启动。rmiregistry&nbsp;命令不产生任何输出而且一般在后台运行。远程对象注册服务程序是自举命名服务。主机上的&nbsp;RMI&nbsp;服务器将利用它将远程对象绑定到名字上。客户机即可查询远程对象并进行远程方法调用。注册服务程序一般用于定位应用程序需调用其方法的第一个远程对象。该对象反过来对各应用程序提供相应的支持，用于查找其它对象。java.rmi.registry.LocateRegistry&nbsp;类的方法可用于在某台主机或主机和端口上获取注册服务程序操作。java.rmi.Naming&nbsp;类的基于&nbsp;URL&nbsp;的方法将对注册服务程序进行操作，并可用于查询远程对象、将简单（字符串）名称绑定到远程对象、将新名称重新绑定到远程对象（覆盖旧绑定）、取消远程对象的绑定以及列出绑定在注册服务程序上的&nbsp;URL。&nbsp;<br />
<br />
serialver&nbsp;<br />
<br />
功能说明：&nbsp;<br />
serialver&nbsp;命令返回&nbsp;serialVersionUID。&nbsp;<br />
语法：&nbsp;<br />
serialver&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;<br />
补充说明：&nbsp;<br />
serialver&nbsp;以适于复制到演变类的形式返回一个或多个类的&nbsp;serialVersionUID。不带参数调用时，它输出用法行。&nbsp;<br />
命令选项&nbsp;<br />
-show&nbsp;显示一个简单的用户界面。输入完整的类名并按回车键或&#8220;显示&#8221;按钮可显示&nbsp;serialVersionUID。&nbsp;<br />
<br />
jarsigner&nbsp;<br />
<br />
功能说明：&nbsp;<br />
为&nbsp;Java&nbsp;归档&nbsp;(JAR)&nbsp;文件产生签名，并校验已签名的&nbsp;JAR&nbsp;文件的签名。&nbsp;<br />
语法：&nbsp;<br />
jarsigner&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;jar-file&nbsp;alias&nbsp;<br />
jarsigner&nbsp;-verify&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;jar-file&nbsp;<br />
补充说明：&nbsp;<br />
jarsigner&nbsp;工具用于两个目的：&nbsp;<br />
1:为&nbsp;Java&nbsp;归档&nbsp;(JAR)&nbsp;文件签名&nbsp;<br />
2:校验已签名的&nbsp;JAR&nbsp;文件的签名和完整性&nbsp;<br />
命令选项&nbsp;<br />
-keystore[url]&nbsp;指定密钥仓库的&nbsp;URL。缺省值是用户的宿主目录中的&nbsp;.keystore&nbsp;文件，它由系统属性&#8220;user.home&#8221;决定。&nbsp;<br />
-storetype[storetype]&nbsp;指定要被实例化的密钥仓库类型。默认的密钥仓库类型是安全属性文件中&nbsp;"keystore.type"&nbsp;属性值所指定的那个类型，由&nbsp;java.security.KeyStore&nbsp;中的静态方法&nbsp;getDefaultType&nbsp;返回。&nbsp;<br />
-storepass[password]&nbsp;指定访问密钥仓库所需的口令。这仅在签名（不是校验）JAR&nbsp;文件时需要。在这种情况下，如果命令行中没有提供&nbsp;-storepass&nbsp;选项，用户将被提示输入口令。&nbsp;<br />
-keypass[password]&nbsp;指定用于保护密钥仓库项（由命令行中指定的别名标出）的私钥的口令。使用&nbsp;jarsigner&nbsp;为&nbsp;JAR&nbsp;文件签名时需要该口令。如果命令行中没有提供口令，且所需的口令与密钥仓库的口令不同，则将提示用户输入它。&nbsp;<br />
-sigfile[file]&nbsp;指定用于生成&nbsp;.SF&nbsp;和&nbsp;.DSA&nbsp;文件的基本文件名。&nbsp;<br />
-signedjar[file]&nbsp;指定用于已签名的&nbsp;JAR&nbsp;文件的名称。&nbsp;<br />
-verify&nbsp;如果它出现在命令行中，则指定的&nbsp;JAR&nbsp;文件将被校验，而不是签名。如果校验成功，将显示&#8220;jar&nbsp;verified&#8221;。如果试图校验未签名的&nbsp;JAR&nbsp;文件，或校验被不支持的算法（例如未安装&nbsp;RSA&nbsp;提供者时使用的&nbsp;RSA）签名的&nbsp;JAR&nbsp;文件，则将有如下显示：&nbsp;"jar&nbsp;is&nbsp;unsigned.&nbsp;(signatures&nbsp;missing&nbsp;or&nbsp;not&nbsp;parsable)"&nbsp;。&nbsp;<br />
-certs&nbsp;如果它与&nbsp;-verify&nbsp;和&nbsp;-verbose&nbsp;选项一起出现在命令行中，则输出将包括&nbsp;JAR&nbsp;文件的每个签名人的证书信息。&nbsp;<br />
-verbose&nbsp;如果它出现在命令行中，则代表&#8220;verbose&#8221;模式，它使&nbsp;jarsigner&nbsp;在&nbsp;JAR&nbsp;签名或校验过程中输出额外信息。&nbsp;<br />
-internalsf&nbsp;过去，JAR&nbsp;文件被签名时产生的&nbsp;.DSA（签名块）文件包含一个同时产生的&nbsp;.SF&nbsp;文件（签名文件）的完整编码副本。这种做法已被更改。为了减小输出&nbsp;JAR&nbsp;文件的整个大小，缺省情况下&nbsp;.DSA&nbsp;文件不再包含&nbsp;.SF&nbsp;文件的副本。但是如果&nbsp;-internalsf&nbsp;出现在命令行中，将采用旧的做法。该选项主要在测试时有用；实际上不应使用它，因为这样将消除有用的优化。&nbsp;<br />
-sectionsonly&nbsp;如果它出现在命令行中，则&nbsp;JAR&nbsp;文件被签名时生成的&nbsp;.SF&nbsp;文件（签名文件）将不包括含有整个清单文件的散列的头。它仅包含&nbsp;与&nbsp;JAR&nbsp;中每个单独的源文件相关的信息和散列。该选项主要在测试时有用；实际上不应使用它，因为这样将消除有用的优化。&nbsp;<br />
-J[javaoption]&nbsp;将指定的&nbsp;javaoption&nbsp;串直接传递到&nbsp;Java&nbsp;解释器。(（jarsigner&nbsp;实际上是解释器的一个&nbsp;&#8220;wrapper&#8221;）。该选项不应含有任何空格。它有助于调整执行环境或内存使用。要获得可用的解释器选项的清单，可在命令行键入&nbsp;java&nbsp;-h&nbsp;或&nbsp;java&nbsp;-X。&nbsp;<br />
&nbsp;<br />
JDK的命令详解（2）<br />
<br />
keytool&nbsp;<br />
<br />
功能说明：&nbsp;<br />
管理由私钥和认证相关公钥的&nbsp;X.509&nbsp;证书链组成的密钥仓库（数据库）。还管理来自可信任实体的证书。&nbsp;<br />
语法：&nbsp;<br />
keytool&nbsp;[&nbsp;命令&nbsp;]&nbsp;<br />
补充说明：&nbsp;<br />
keytool&nbsp;是个密钥和证书管理工具。它使用户能够管理自己的公钥/私钥对及相关证书，用于（通过数字签名）自我认证（用户向别的用户/服务认证自己）或数据完整性以及认证服务。它还允许用户储存他们的通信对等者的公钥（以证书形式）。&nbsp;<br />
<br />
native2ascii&nbsp;<br />
<br />
功能说明：&nbsp;<br />
将含有本地编码字符（既非&nbsp;Latin1&nbsp;又非&nbsp;Unicode&nbsp;字符）的文件转换为&nbsp;Unicode&nbsp;编码字符的文件。&nbsp;<br />
语法：&nbsp;<br />
native2ascii&nbsp;[options]&nbsp;[inputfile&nbsp;[outputfile]]&nbsp;<br />
补充说明：&nbsp;<br />
<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>&nbsp;编译器和其它&nbsp;Java&nbsp;工具只能处理含有&nbsp;Latin-1&nbsp;和/或&nbsp;Unicode&nbsp;编码（udddd&nbsp;记号）字符的文件。native2ascii&nbsp;将含有其它字符编码的文件转换成含&nbsp;Latin-1&nbsp;和/或&nbsp;Unicode&nbsp;编码字符的文件。若省略&nbsp;outputfile，则使用标准输出设备输出。此外，如果也省略&nbsp;inputfile，则使用标准输入设备输入。&nbsp;<br />
命令选项&nbsp;<br />
-reverse&nbsp;执行相反的操作：将含&nbsp;Latin-1&nbsp;和/或&nbsp;Unicode&nbsp;编码字符的文件转换成含本地编码字符的文件。&nbsp;<br />
-encoding[encoding_name]&nbsp;指定转换过程使用的编码名称。缺省的编码从系统属性&nbsp;file.encoding&nbsp;中得到。&nbsp;<br />
<br />
appletviewer&nbsp;<br />
<br />
功能说明：&nbsp;<br />
<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>&nbsp;applet&nbsp;浏览器。appletviewer&nbsp;命令可在脱离万维网浏览器环境的情况下运行&nbsp;applet。&nbsp;<br />
语法：&nbsp;<br />
appletviewer&nbsp;[&nbsp;threads&nbsp;flag&nbsp;]&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;urls&nbsp;...&nbsp;<br />
补充说明：&nbsp;<br />
appletviewer&nbsp;命令连接到&nbsp;url&nbsp;所指向的文档或资源上，并在其自身的窗口中显示文档引用的每个&nbsp;applet。注意：如果&nbsp;url&nbsp;所指向的文档不引用任何带有&nbsp;OBJECT、EMBED&nbsp;或&nbsp;APPLET&nbsp;标记的&nbsp;applet，那么&nbsp;appletviewer&nbsp;就不做任何事情。&nbsp;<br />
命令选项&nbsp;<br />
-debug&nbsp;在&nbsp;Java&nbsp;调试器&nbsp;jdb&nbsp;中启动&nbsp;appletviewer，使您可以调试文档中的&nbsp;applet。&nbsp;<br />
-encoding[编码名称]&nbsp;指定输入&nbsp;HTML&nbsp;文件的编码名称。&nbsp;<br />
-J[javaoption]&nbsp;将&nbsp;javaoption&nbsp;字符串作为单个参数传给运行&nbsp;appletviewer&nbsp;的&nbsp;Java&nbsp;解释器。参数不能含有空格。由多重参数组成的字符串，其中的每个参数都必须以前缀&nbsp;-J&nbsp;开头，该前缀以后将被除去。这在调整编译器的执行环境或内存使用时将很有用。&nbsp;<br />
<br />
extcheck&nbsp;<br />
<br />
功能说明：&nbsp;<br />
extcheck&nbsp;检测目标&nbsp;jar&nbsp;文件与当前安装方式扩展&nbsp;jar&nbsp;文件间的版本冲突。&nbsp;<br />
语法：&nbsp;<br />
extcheck&nbsp;[&nbsp;-verbose&nbsp;]&nbsp;targetfile.jar&nbsp;<br />
补充说明：&nbsp;<br />
extcheck&nbsp;实用程序检查指定&nbsp;Jar&nbsp;文件的标题和版本与&nbsp;JDK&nbsp;TM&nbsp;软件中所安装的扩展是否有冲突。在安装某个扩展前，可以用该实用程序查看是否已安装了该扩展的相同版本或更高的版本。&nbsp;<br />
extcheck&nbsp;实用程序将&nbsp;targetfile.jar&nbsp;文件清单的&nbsp;specification-title&nbsp;和&nbsp;specification-version&nbsp;头与当前安装在扩展目录下所有&nbsp;Jar&nbsp;文件的相对应的头进行比较（缺省扩展目录为&nbsp;jre/lib/ext）。extcheck&nbsp;实用程序比较版本号的方式与&nbsp;java.lang.Package.isCompatibleWith&nbsp;方法相同。若未检测到冲突，则返回代码为&nbsp;0。如果扩展目录中任何一个&nbsp;jar&nbsp;文件的清单有相同的&nbsp;specification-title&nbsp;和相同的或更新的&nbsp;specification-version&nbsp;号，则返回非零错误代码。如果&nbsp;targetfile.jar&nbsp;的清单中没有&nbsp;specification-title&nbsp;或&nbsp;specification-version&nbsp;属性，则同样返回非零错误代码。&nbsp;<br />
命令选项&nbsp;<br />
-verbose&nbsp;对扩展目录中的&nbsp;Jar&nbsp;文件进行检查时，列出文件。此外，还报告目标&nbsp;jar&nbsp;文件的清单属性及所有冲突的&nbsp;jar&nbsp;文件。&nbsp;<br />
<br />
jar&nbsp;<br />
<br />
功能说明：&nbsp;<br />
Java归档工具&nbsp;<br />
语法：&nbsp;<br />
jar&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;[manifest]&nbsp;destination&nbsp;input-file&nbsp;[input-files]&nbsp;<br />
补充说明：&nbsp;<br />
jar工具是个java应用程序，可将多个文件合并为单个JAR归档文件。jar是个多用途的存档及压缩工具，它基于ZIP和ZLIB压缩格式。然而，设计jar的主要目的是便于将java&nbsp;applet或应用程序打包成单个归档文件。将applet或应用程序的组件(.class&nbsp;文件、图像和声音)合并成单个归档文件时，可以用java代理(如浏览器)在一次HTTP事务处理过程中对它们进行下载，而不是对每个组件都要求一个新连接。这大大缩短了下载时间。jar还能压缩文件，从而进一步提高了下载速度。此外，它允许applet的作者对文件中的各个项进行签名，因而可认证其来源。jar工具的语法基本上与tar命令的语法相同。&nbsp;<br />
命令选项&nbsp;<br />
-c&nbsp;在标准输出上创建新归档或空归档。&nbsp;<br />
-t&nbsp;在标准输出上列出内容表。&nbsp;<br />
-x[file]&nbsp;从标准输入提取所有文件，或只提取指定的文件。如果省略了file，则提取所有文件；否则只提取指定文件。&nbsp;<br />
-f&nbsp;第二个参数指定要处理的jar文件。在-c(创建)情形中，第二个参数指的是要创建的jar文件的名称(不是在标准输出上)。在-t(表(或-x(抽取)这两种情形中，第二个参数指定要列出或抽取的jar文件。&nbsp;<br />
　&nbsp;-v&nbsp;在标准错误输出设备上生成长格式的输出结果。&nbsp;<br />
-m&nbsp;包括指定的现有清单文件中的清单信息。用法举例：&#8220;jar&nbsp;cmf&nbsp;myManifestFile&nbsp;myJarFile&nbsp;*.class&#8221;&nbsp;<br />
-0&nbsp;只储存，不进行&nbsp;ZIP&nbsp;压缩。&nbsp;<br />
-M&nbsp;不创建项目的清单文件。&nbsp;<br />
-u&nbsp;通过添加文件或更改清单来更新现有的&nbsp;JAR&nbsp;文件。例如：&#8220;jar&nbsp;-uf&nbsp;foo.jar&nbsp;foo.class&#8221;将文件&nbsp;foo.class&nbsp;添加到现有的JAR文件foo.jar中，而&#8220;jar&nbsp;umf&nbsp;manifest&nbsp;foo.jar&#8221;则用manifest中的信息更新foo.jar的清单。&nbsp;<br />
-C&nbsp;在执行&nbsp;jar&nbsp;命令期间更改目录。例如：&#8220;jar&nbsp;-uf&nbsp;foo.jar&nbsp;-C&nbsp;classes&nbsp;*&#8221;将classes目录内的所有文件加到foo.jar中，但不添加类目录本身。&nbsp;<br />
程序示例&nbsp;<br />
1:将当前目录下所有CLASS文件打包成新的JAR文件：&nbsp;<br />
jar&nbsp;cf&nbsp;file.jar&nbsp;*.class&nbsp;<br />
2:显示一个JAR文件中的文件列表&nbsp;<br />
jar&nbsp;tf&nbsp;file.jar&nbsp;<br />
3:将当前目录下的所有文件增加到一个已经存在的JAR文件中&nbsp;<br />
jar&nbsp;cvf&nbsp;file.jar&nbsp;*&nbsp;<br />
<br />
javadoc&nbsp;<br />
<br />
功能说明&nbsp;<br />
<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>&nbsp;API文档生成器从Java源文件生成API文档HTML页。&nbsp;<br />
语法：&nbsp;<br />
javadoc&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;[&nbsp;包名&nbsp;]&nbsp;[&nbsp;源文件名&nbsp;]&nbsp;[&nbsp;@files&nbsp;]&nbsp;<br />
其中[&nbsp;包名&nbsp;]为用空格分隔的一系列包的名字，包名不允许使用通配符，如（*）。[&nbsp;源文件名&nbsp;]为用空格分隔的一系列的源文件名，源文件名可包括路径和通配符，如（*）。[&nbsp;@files&nbsp;]是以任何次序包含包名和源文件的一个或多个文件。&nbsp;<br />
补充说明&nbsp;<br />
Javadoc解析Java源文件中的声明和文档注释，并产生相应的HTML页缺省），描述公有类、保护类、内部类、接口、构造函数、方法和域。&nbsp;<br />
在实现时，Javadoc要求且依赖于java编译器完成其工作。Javadoc调用部分javac编译声明部分，忽略成员实现。它建立类的内容丰富的内部表示，包括类层次和&#8220;使用&#8221;关系，然后从中生成HTML。Javadoc还从源代码的文档注释中获得用户提供的文档。&nbsp;<br />
当Javadoc建立其内部文档结构时，它将加载所有引用的类。由于这一点，Javadoc必须能查找到所有引用的类，包括引导类、扩展类和用户类。&nbsp;<br />
命令选项&nbsp;<br />
-overview&nbsp;i&gt;path/filename&nbsp;指定javadoc应该从path/filename所指定的&#8220;源&#8221;文件中获取概述文档，并将它放到概述页中（overview-summary.html）。其中path/filename&nbsp;是相对于-sourcepath的相对路径名。&nbsp;<br />
-public&nbsp;只显示公有类及成员。&nbsp;<br />
-protected&nbsp;只显示受保护的和公有的类及成员。这是缺省状态。&nbsp;<br />
-package&nbsp;只显示包、受保护的和公有的类及成员。&nbsp;<br />
-private&nbsp;显示所有类和成员。&nbsp;<br />
-help&nbsp;显示联机帮助，它将列出这些javadoc和doclet命令行选项。&nbsp;<br />
-doclet&nbsp;class&nbsp;指定启动用于生成文档的docle&nbsp;的类文件。该doclet定义了输出的内容和格式。如果未使用-doclet选项，则javadoc使用标准doclet生成缺省HTML格式。该类必须包含start(Root)法。该启动类的路径由&nbsp;-docletpath选项定义。&nbsp;<br />
-docletpath&nbsp;classpathlist&nbsp;指定doclet类文件的路径，该类文件用-doclet选项指定。如果doclet已位于搜索路径中，则没有必要使用该选项。&nbsp;<br />
-1.1&nbsp;生成具有用Javadoc&nbsp;1.1生成的文档的外观和功能的文档。也就是说，页的背景为灰色，用图像做页眉，使用bullet列表而不是表格，具有单层目的目录结构，不包含继承&nbsp;API，不使?***&nbsp;TML框架，并且不支持内部类。该选项还自动将索引分割成每个字母一个文件。如果想要这种外观，则该选项比javadoc&nbsp;1.1优越之处等于修正了一些错误。&nbsp;<br />
-sourcepath&nbsp;sourcepathlist&nbsp;<br />
当将包名传递到javadoc命令中时，指定定位源文件（.java）的搜索路径。注意只有当用&nbsp;javadoc命令指定包名时才能使用sourcepath选项&nbsp;--&nbsp;它将不会查找传递到javadoc命令中的.java文件。如果省略-sourcepath，则javadoc使用类路径查找源文件。&nbsp;<br />
-classpath&nbsp;classpathlist&nbsp;指定javadoc将在其中查找引用类的路径&nbsp;--&nbsp;引用类是指带文档的类加上它们引用的任何类。Javadoc将搜索指定路径的所有子目录。classpathlist可以包括多个路径，彼此用逗号分隔。&nbsp;<br />
-bootclasspath&nbsp;classpathlist&nbsp;指定自举类所在路径。它们名义上是Java平台类。这个bootclasspath是Javadoc将用来查找源文件和类文件的搜索路径的一部分。在&nbsp;classpathlist中用冒号（:）分隔目录。&nbsp;<br />
-extdirs&nbsp;dirlist&nbsp;指定扩展类所在的目录。它们是任何使用Java扩展机制的类。这个&nbsp;extdirs是Javadoc将用来查找源文件和在文件的搜索路径的一部分。在dirlist中用冒号（:）分隔目录。&nbsp;<br />
-verbose&nbsp;在javadoc运行时提供更详细的信息。不使用verbose选项时，将显示加载源文件、生成文档（每个源文件一条信息）和排序的信息。verbose选项导致打印额外的信息，指定解析每个java源文件的毫秒数。&nbsp;<br />
-locale&nbsp;language_country_variant&nbsp;指定javadoc在生成文档时使用的环境。&nbsp;<br />
-encoding&nbsp;name&nbsp;指定源文件编码名，例如EUCJIS/SJIS。如果未指定该选项，则使用平台缺省转换器。&nbsp;<br />
-J[flag]&nbsp;将flag直接传递给运行javadoc的运行时系统java。注意在J和flag之间不能有空格。&nbsp;<br />
标准&nbsp;Doclet&nbsp;提供的选项&nbsp;<br />
-d&nbsp;directory&nbsp;指定javadoc保存生成的HTML件的目的目录。省略该选项将导致把文件保存到当前目录中。其中directory可以是绝对路径或相对当前工作目录的相对路径。&nbsp;<br />
-use&nbsp;对每个带文档类和包包括一个&#8220;用法&#8221;页。该页描述使用给定类或包的任何&nbsp;API&nbsp;的包、类、方法、构造函数和域。对于给定类&nbsp;C，使用类&nbsp;C&nbsp;的任何东西将包括&nbsp;C&nbsp;的子类、声明为&nbsp;C&nbsp;的域、返回&nbsp;C&nbsp;的方法以及具有&nbsp;C&nbsp;类型参数的方法和构造函数。&nbsp;<br />
-version&nbsp;在生成文档中包括&nbsp;@version&nbsp;文本。缺省地将省略该文本。&nbsp;<br />
-author&nbsp;在生成文档中包括&nbsp;@author&nbsp;文本。&nbsp;<br />
-splitindex&nbsp;将索引文件按字母分割成多个文件，每个字母一个文件，再加上一个包含所有以非字母字符开头的索引项的文件。&nbsp;<br />
-windowtitle[title]&nbsp;指定放入&nbsp;HTML&nbsp;&lt;title&gt;&nbsp;标记中的标题。它将出现在窗口标题栏中和为该页创建的任何浏览器书签（最喜爱的位置）中。该标题不应该包含任何&nbsp;HTML&nbsp;标记，因为浏览器将不能正确解释它们。在&nbsp;title&nbsp;中的任何内部引号必须转义。如果省略&nbsp;-windowtitle，则&nbsp;Javadoc&nbsp;对该选项使用&nbsp;-doctitle&nbsp;的值。&nbsp;<br />
-doctitle[title]&nbsp;指定放置在靠近概述概览文件顶部的标题。该标题将作为一级标题，居中地直接放在导航栏下面。title&nbsp;可包含&nbsp;html&nbsp;标记和空格，但是如果这样，则必须用引号将它括起。在&nbsp;title&nbsp;中的任何内部引号必须转义。&nbsp;<br />
-title[title]&nbsp;该选项不再存在。它仅存在于&nbsp;Javadoc&nbsp;1.2&nbsp;的&nbsp;Beta&nbsp;版中。它已重命名为&nbsp;-doctitle。重命名该选项是为了更清楚地表示它定义文档标题而不是窗口标题。&nbsp;<br />
-header[header]&nbsp;指定放置在每个输出文件顶部的页眉文本。该页眉将放在上部导航栏的右边。header&nbsp;可包含&nbsp;HTML&nbsp;标记和空格，但是如果这样则必须用引号将它括起。在&nbsp;header&nbsp;中的任何内部引号必须转义。&nbsp;<br />
-footer[footer]&nbsp;指定放置在每个输出文件底部的脚注文本。脚本将放置在下部导航栏的右边。footer&nbsp;可包含&nbsp;html&nbsp;标记和空格，但是如果这样，则必须用引号将它括起。在&nbsp;footer&nbsp;中的任何内部引号必须转义。&nbsp;<br />
-bottom[text]&nbsp;指定放置在每个输出文件底部的文本。该文本将放置在页底，位于下部导航栏的下面。其中&nbsp;text&nbsp;可包含&nbsp;HTML&nbsp;标记和空格，但是如果这样，则必须用引号将它括起。在&nbsp;text&nbsp;中的任何内部引号必须转义。&nbsp;<br />
-link[docURL]&nbsp;创建链接指向已用&nbsp;javadoc-生成的外部引用类的文档。参数&nbsp;docURL是想要链接到的&nbsp;javadoc-生成的外部文档的&nbsp;URL。该位置可以是相对的或绝对的&nbsp;URL。&nbsp;<br />
-linkoffline[docURL][packagelistURL]&nbsp;该选项为外部引用类名字创建指向文档的链接。&nbsp;<br />
-group[groupheading]packagepattern:packagepattern:...&nbsp;将概述页上的包分成指定的组，每组一个表格。用不同的&nbsp;-group&nbsp;选项指定每个组。各组按命令行中指定的次序出现在页面上。组内的包按字母排序。对于给定&nbsp;-group&nbsp;选项，与&nbsp;packagepattern&nbsp;表达式列表匹配的包出现在标题为&nbsp;groupheading&nbsp;的表格中。&nbsp;<br />
-nodeprecated&nbsp;防止在文档中生成任何不鼓励使用的&nbsp;API。它执行-nodeprecatedlist&nbsp;所做的事情，并且它不在文档其余部分生成任何不鼓励使用的&nbsp;API。当编写代码并不想被不鼓励使用的代码分心时，这是非常有用的。&nbsp;<br />
-nodeprecatedlist&nbsp;防止在生成文件中包含不鼓励使用的&nbsp;API&nbsp;列表（deprecated-list.html）并防止在导航栏中包含该页的链接。（但是，javadoc&nbsp;继续在文档其余部分生成不鼓励使用的&nbsp;API。）&nbsp;如果源代码未包含不鼓励使用的&nbsp;API，并且想要导航栏更干净，则它是非常有用的。&nbsp;<br />
-notree&nbsp;在生成文档中忽略类/接口层次。缺省地，将产生该层次。&nbsp;<br />
-noindex&nbsp;在生成文档中忽略索引。缺省地，将产生索引。&nbsp;<br />
-nohelp&nbsp;在输出的每页顶部和底部的导航栏中忽略&#8220;帮助&#8221;链接。&nbsp;<br />
-nonavbar&nbsp;防止产生导航栏、页眉和脚注，否则它们将出现在生成页的顶部和底部。它对&#8220;bottom&#8221;选项没有影响。当只对内容感兴趣并且没有必要导航时，例如仅将文件转换成&nbsp;PostScript&nbsp;或&nbsp;PDF&nbsp;以进行打印，-nonavbar&nbsp;选项是非常有用的。&nbsp;<br />
-helpfile[path/filename]&nbsp;指定顶部和底部导航栏中&#8220;帮助&#8221;链接所链接到的替代帮助文件&nbsp;path/filename&nbsp;的路径。不使用该选项时，Javadoc&nbsp;自动创建帮助文件&nbsp;help-doc.html，它在&nbsp;Javadoc&nbsp;中硬编码。该选项使得可覆盖这种缺省情况。其中&nbsp;filename&nbsp;可以是任何名字，不局限于&nbsp;help-doc.html&nbsp;--&nbsp;Javadoc&nbsp;将相应调整导航栏中的链接。&nbsp;<br />
-stylesheetfile[path/filename]&nbsp;指定替代&nbsp;HTML&nbsp;样式表单文件的路径。不使用该选项时，Javadoc&nbsp;将自动创建样式表单文件&nbsp;stylesheet.css，它在&nbsp;Javadoc&nbsp;中硬编码。该选项使得可覆盖这种缺省情况。其中&nbsp;filename&nbsp;可以是任何名字，不局限于&nbsp;stylesheet.css。&nbsp;<br />
-docencoding[name]&nbsp;指定输出&nbsp;HTML&nbsp;文件的编码方式。&nbsp;<br />
<br />
javah&nbsp;<br />
<br />
功能说明：&nbsp;<br />
C&nbsp;头文件和&nbsp;Stub&nbsp;文件生成器。javah&nbsp;从&nbsp;Java&nbsp;类生成&nbsp;C&nbsp;头文件和&nbsp;C&nbsp;源文件。这些文件提供了连接胶合，使&nbsp;Java&nbsp;和&nbsp;C&nbsp;代码可进行交互。&nbsp;<br />
语法：&nbsp;<br />
javah&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;fully-qualified-classname.&nbsp;.&nbsp;.&nbsp;<br />
javah_g&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;fully-qualified-classname.&nbsp;.&nbsp;.&nbsp;<br />
补充说明：&nbsp;<br />
javah&nbsp;生成实现本地方法所需的&nbsp;C&nbsp;头文件和源文件。C&nbsp;程序用生成的头文件和源文件在本地源代码中引用某一对象的实例变量。.h&nbsp;文件含有一个&nbsp;struct&nbsp;定义，该定义的布局与相应类的布局平行。该&nbsp;struct&nbsp;中的域对应于类中的实例变量。&nbsp;<br />
头文件名以及在头文件中所声明的结构名都来源于类名。如果传给&nbsp;javah&nbsp;的类是在某个包中，则头文件名和结构名前都要冠以该包名。下划线&nbsp;(_)&nbsp;用作名称分隔符。&nbsp;<br />
缺省情况下，javah&nbsp;为每个在命令行中列出的类都创建一个头文件，且将该文件放在当前目录中。用&nbsp;-stubs&nbsp;选项创建源文件。用&nbsp;-o&nbsp;选项将所有列出类的结果串接成一个单一文件。&nbsp;<br />
缺省情况下，javah&nbsp;为每个在命令行中列出的类都创建一个头文件，且将该文件放在当前目录中。用&nbsp;-stubs&nbsp;选项创建源文件。用&nbsp;-o&nbsp;选项将所有列出类的结果串接成一个单一文件。&nbsp;<br />
命令选项&nbsp;<br />
-o[输出文件]&nbsp;将命令行中列出的所有类的头文件或源文件串接到输出文件中。-o&nbsp;或&nbsp;-d&nbsp;两个选项只能选择一个。&nbsp;<br />
-d[目录]&nbsp;设置&nbsp;javah&nbsp;保存头文件或&nbsp;stub&nbsp;文件的目录。-d&nbsp;或&nbsp;-o&nbsp;两个选项只能选择一个。&nbsp;<br />
-stubs&nbsp;使&nbsp;javah&nbsp;从&nbsp;Java&nbsp;对象文件生成&nbsp;C&nbsp;声明。&nbsp;<br />
-verbose&nbsp;指明长格式输出，并使&nbsp;javah&nbsp;将所生成文件的有关状态的信息输出到标准输出设备中。&nbsp;<br />
-help&nbsp;输出&nbsp;javah&nbsp;用法的帮助信息。&nbsp;<br />
-version&nbsp;输出&nbsp;javah&nbsp;的版本信息。&nbsp;<br />
-jni&nbsp;使&nbsp;javah&nbsp;创建一输出文件，该文件包含&nbsp;JNI&nbsp;风格的本地方法函数原型。这是缺省输出，所以&nbsp;-jni&nbsp;的使用是可选的。&nbsp;<br />
-classpath[路径]&nbsp;指定&nbsp;javah&nbsp;用来查询类的路径。如果设置了该选项，它将覆盖缺省值或&nbsp;CLASSPATH&nbsp;环境变量。目录用冒号分隔。&nbsp;<br />
-bootclasspath[路径]&nbsp;指定加载自举类所用的路径。缺省情况下，自举类是实现核心&nbsp;Java&nbsp;平台的类，位于&nbsp;jrelib&nbsp;<br />
t.jar&nbsp;和&nbsp;jrelibi18n.jar&nbsp;中。&nbsp;<br />
-old&nbsp;指定应当生成旧&nbsp;JDK1.0&nbsp;风格的头文件。&nbsp;<br />
-force&nbsp;指定始终写输出文件。&nbsp;<br />
<br />
javap&nbsp;<br />
<br />
功能说明：&nbsp;<br />
<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>&nbsp;类文件解析器。&nbsp;<br />
语法：&nbsp;<br />
javap&nbsp;[&nbsp;命令选项&nbsp;]&nbsp;class.&nbsp;.&nbsp;.&nbsp;<br />
补充说明：&nbsp;<br />
javap&nbsp;命令用于解析类文件。其输出取决于所用的选项。若没有使用选项，javap&nbsp;将输出传递给它的类的&nbsp;public&nbsp;域及方法。javap&nbsp;将其输出到标准输出设备上。&nbsp;<br />
命令选项&nbsp;<br />
-help&nbsp;输出&nbsp;javap&nbsp;的帮助信息。&nbsp;<br />
-l&nbsp;输出行及局部变量表。&nbsp;<br />
-b&nbsp;确保与&nbsp;JDK&nbsp;1.1&nbsp;javap&nbsp;的向后兼容性。&nbsp;<br />
-public&nbsp;只显示&nbsp;public&nbsp;类及成员。&nbsp;<br />
-protected&nbsp;只显示&nbsp;protected&nbsp;和&nbsp;public&nbsp;类及成员。&nbsp;<br />
-package&nbsp;只显示包、protected&nbsp;和&nbsp;public&nbsp;类及成员。这是缺省设置。&nbsp;<br />
-private&nbsp;显示所有类和成员。&nbsp;<br />
-J[flag]&nbsp;直接将&nbsp;flag&nbsp;传给运行时系统。&nbsp;<br />
-s&nbsp;输出内部类型签名。&nbsp;<br />
-c&nbsp;输出类中各方法的未解析的代码，即构成&nbsp;Java&nbsp;字节码的指令。&nbsp;<br />
-verbose&nbsp;输出堆栈大小、各方法的&nbsp;locals&nbsp;及&nbsp;args&nbsp;数。&nbsp;<br />
-classpath[路径]&nbsp;指定&nbsp;javap&nbsp;用来查找类的路径。如果设置了该选项，则它将覆盖缺省值或&nbsp;CLASSPATH&nbsp;环境变量。目录用冒号分隔。&nbsp;<br />
-&nbsp;bootclasspath[路径]&nbsp;指定加载自举类所用的路径。缺省情况下，自举类是实现核心&nbsp;Java&nbsp;平台的类，位于&nbsp;jrelib&nbsp;<br />
t.jar&nbsp;和&nbsp;jrelibi18n.jar&nbsp;中。&nbsp;<br />
-extdirs[dirs]&nbsp;覆盖搜索安装方式扩展的位置。扩展的缺省位置是&nbsp;jrelibext。<img src ="http://www.blogjava.net/rain1102/aggbug/192911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-14 20:48 <a href="http://www.blogjava.net/rain1102/articles/192911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java回调函数 </title><link>http://www.blogjava.net/rain1102/articles/190047.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 01 Apr 2008 04:40:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/190047.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/190047.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/190047.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/190047.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/190047.html</trackback:ping><description><![CDATA[如果我们要测试一个类的方法的执行时间，通常我们会这样做：<br />
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;TestObject&nbsp;{&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;一个用来被测试的方法，进行了一个比较耗时的循环</span>&nbsp;</span>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testMethod(){&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>(</span><span class="keyword">int</span><span>&nbsp;i=</span><span class="number">0</span><span>;&nbsp;i&lt;</span><span class="number">100000000</span><span>;&nbsp;i++){&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;一个简单的测试方法执行时间的方法</span>&nbsp;</span>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testTime(){&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">long</span><span>&nbsp;begin&nbsp;=&nbsp;System.currentTimeMillis();</span><span class="comment">//测试起始时间</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000">testMethod();</font><span class="comment">//测试方法</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">long</span><span>&nbsp;end&nbsp;=&nbsp;System.currentTimeMillis();</span><span class="comment">//测试结束时间</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"[use&nbsp;time]:"</span><span>&nbsp;+&nbsp;(end&nbsp;-&nbsp;begin));</span><span class="comment">//打印使用时间</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObject&nbsp;test=<span class="keyword">new</span><span>&nbsp;TestObject();&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test.testTime();&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class=""><span>}&nbsp;&nbsp;</span> </li>
</ol>
大家看到了testTime()方法，就只有"//测试方法"是需要改变的，下面我们来做一个函数实现相同功能但更灵活：<br />
首先定一个回调接口：<br />
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">interface</span><span>&nbsp;CallBack&nbsp;{&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//执行回调操作的方法</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">void</span><span>&nbsp;execute();&nbsp;&nbsp;</span></span>
    <li class=""><span>}&nbsp;&nbsp;</span> </li>
</ol>
然后再写一个工具类：<br />
<ol class="dp-j">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Tools&nbsp;{&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">/**</span>&nbsp;</span>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;测试函数使用时间，通过定义CallBack接口的execute方法</span>&nbsp;</span>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;callBack</span>&nbsp;</span>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;testTime(CallBack&nbsp;callBack)&nbsp;{&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">long</span><span>&nbsp;begin&nbsp;=&nbsp;System.currentTimeMillis();</span><span class="comment">//测试起始时间</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#ff0000">callBack.execute();</font><span class="comment">///进行回调操作</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">long</span><span>&nbsp;end&nbsp;=&nbsp;System.currentTimeMillis();</span><span class="comment">//测试结束时间</span><span>&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(<span class="string">"[use&nbsp;time]:"</span><span>&nbsp;+&nbsp;(end&nbsp;-&nbsp;begin));</span><span class="comment">//打印使用时间</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;main(String[]&nbsp;args)&nbsp;{&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tools&nbsp;tool&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;Tools();&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tool.testTime(<span class="keyword">new</span><span>&nbsp;CallBack(){&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//定义execute方法</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;execute(){&nbsp;&nbsp;</span></span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//这里可以加放一个或多个要测试运行时间的方法</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestObject.testMethod();&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>
    <li class="alt"><span>}&nbsp;&nbsp;</span> </li>
</ol>
<br /><img src ="http://www.blogjava.net/rain1102/aggbug/190047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-04-01 12:40 <a href="http://www.blogjava.net/rain1102/articles/190047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>根据Schema使用javax.xml.validation.Validator验证XML</title><link>http://www.blogjava.net/rain1102/articles/189137.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 27 Mar 2008 13:46:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/189137.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/189137.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/189137.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/189137.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/189137.html</trackback:ping><description><![CDATA[<p><strong>SchemaValidation .java<br />
</strong><span style="color: #008000"><br />
package com.founder.xml;</span></p>
<p><span style="color: #008000">import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.IOException;<br />
import <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.io.InputStream;</span></p>
<p><span style="color: #008000">import javax.xml.XMLConstants;<br />
import javax.xml.parsers.ParserConfigurationException;<br />
import javax.xml.transform.stream.StreamSource;<br />
import javax.xml.validation.Schema;<br />
import javax.xml.validation.SchemaFactory;<br />
import javax.xml.validation.Validator;</span></p>
<p><span style="color: #008000">import org.xml.sax.SAXException;</span></p>
<p><span style="color: #008000">public class SchemaValidation {</span></p>
<p><span style="color: #008000">&nbsp;/**<br />
&nbsp; * @param args<br />
&nbsp; * @throws IOException<br />
&nbsp; * @throws SAXException<br />
&nbsp; * @throws ParserConfigurationException<br />
&nbsp; */<br />
&nbsp;public static void main(String[] args) throws ParserConfigurationException,<br />
&nbsp;&nbsp;&nbsp;SAXException, IOException {<br />
&nbsp;&nbsp;SchemaValidation sv = new SchemaValidation();<br />
&nbsp;&nbsp;sv.validate();<br />
&nbsp;}</span></p>
<p><span style="color: #008000">&nbsp;public void validate() {<br />
&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;String strLang = XMLConstants.W3C_XML_SCHEMA_NS_URI;<br />
&nbsp;&nbsp;&nbsp;SchemaFactory factory = SchemaFactory.newInstance(strLang);</span></p>
<p><span style="color: #008000">&nbsp;&nbsp;&nbsp;InputStream isSchema = getClass().getResourceAsStream("/founder.xsd");<br />
&nbsp;&nbsp;&nbsp;StreamSource ss = new StreamSource(isSchema);<br />
&nbsp;&nbsp;&nbsp;Schema schema = factory.newSchema(ss);</span></p>
<p><span style="color: #008000">&nbsp;&nbsp;&nbsp;Validator validator = schema.newValidator();<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;InputStream isXML = getClass().getResourceAsStream("/founder.xml");<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;StreamSource source = new StreamSource(isXML);<br />
&nbsp;&nbsp;&nbsp;validator.validate(source);<br />
&nbsp;&nbsp;&nbsp;System.out.println("Result : Valid!");</span></p>
<p><span style="color: #008000">&nbsp;&nbsp;} catch (Exception e) {<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;System.out.println("Result : Invalid!");<br />
&nbsp;&nbsp;}</span></p>
<p><span style="color: #008000">&nbsp;}</span></p>
<p><span style="color: #008000">}<br />
<br />
<br />
<span style="color: #000000"><strong>founder.xsd</strong></span><br />
<br />
&lt;?xml version="1.0"?&gt;<br />
&lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"<br />
&nbsp;xmlns="http://www.founder.com" elementFormDefault="qualified"&gt;<br />
&nbsp;&lt;xs:element name="note"&gt;<br />
&nbsp;&nbsp;&lt;xs:complexType&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;xs:sequence&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element name="to" type="xs:string" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element name="from" type="xs:string" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element name="heading" type="xs:string" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;xs:element name="body" type="xs:string" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/xs:sequence&gt;<br />
&nbsp;&nbsp;&lt;/xs:complexType&gt;<br />
&nbsp;&lt;/xs:element&gt;<br />
&lt;/xs:schema&gt;<br />
<br />
<br />
<span style="color: #000000"><strong>founder.xml</strong></span><br />
<br />
&lt;?xml version="1.0"?&gt;<br />
&lt;note xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
&nbsp;xsi:schemaLocation="http://www.founder.com founder.xsd"&gt;<br />
&nbsp;&lt;to&gt;Tove&lt;/to&gt;<br />
&nbsp;&lt;from&gt;Jani&lt;/from&gt;<br />
&nbsp;&lt;heading&gt;Reminder&lt;/heading&gt;<br />
&nbsp;&lt;body&gt;Don't forget me this weekend!&lt;/body&gt;<br />
&lt;/note&gt;<br />
<br />
<br />
<br />
</span></p><img src ="http://www.blogjava.net/rain1102/aggbug/189137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-03-27 21:46 <a href="http://www.blogjava.net/rain1102/articles/189137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Set，List和Hibernate里面的PersistentSet</title><link>http://www.blogjava.net/rain1102/articles/175733.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 16 Jan 2008 09:39:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/175733.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/175733.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/175733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/175733.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/175733.html</trackback:ping><description><![CDATA[最近两天突然对List和Set产生了兴趣，发觉很多地方都在讲他们的区别，包括是否可以添加重复对象以及他们的排序问题，仔细想想这个问题很有意思，我可以回答是有序的也可以说是无序的，这要看是怎么回答了，list是按照添加的先后顺序来排序的，所以可以说他是有序的，说list无序是说他内部是无序的，Set有序说的是Set是内部排序的，按照从小到大排序。说他无序说的是他不按照你输入的顺序来排序。<br />
然后看到Hibernate里面用到一对多，或者多对多时候会用到Set，然后我看自己的model，里面明明用的是HashSet，为什么他就可以按照集合里对象的字段排序呢？问了杨大哥终于知道了，原来在返回的时候返回给用户的是Hibernate的自己的类：org.hibernate.collection.PersistentSet。Oh my god!<br /><img src ="http://www.blogjava.net/rain1102/aggbug/175733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-16 17:39 <a href="http://www.blogjava.net/rain1102/articles/175733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Servlet(或者Filter，或者Listener)中使用spring的IOC容器 </title><link>http://www.blogjava.net/rain1102/articles/175495.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 15 Jan 2008 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/175495.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/175495.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/175495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/175495.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/175495.html</trackback:ping><description><![CDATA[<p>在servlet或者filter或者Listener中使用spring的IOC容器的方法是：</p>
<p>WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getSession().getServletContext());&nbsp;</p>
<p>由于spring是注入的对象放在ServletContext中的，所以可以直接在ServletContext取出WebApplicationContext 对象：</p>
<p>WebApplicationContext webApplicationContext = (WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);</p>
<p>事实上WebApplicationContextUtils.getWebApplicationContext方法就是使用上面的代码实现的，建议使用上面上面的静态方法&nbsp;</p>
<br />
注意：在使用webApplicationContext.getBean("ServiceName")的时候，前面强制转化要使用接口，如果使用实现类会报类型转换错误。如：<br />
LUserService&nbsp;userService ＝ (LUserService) webApplicationContext.getBean("userService");<img src ="http://www.blogjava.net/rain1102/aggbug/175495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-15 16:42 <a href="http://www.blogjava.net/rain1102/articles/175495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA如何调用DOS命令</title><link>http://www.blogjava.net/rain1102/articles/175215.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 14 Jan 2008 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/175215.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/175215.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/175215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/175215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/175215.html</trackback:ping><description><![CDATA[<a href="http://www.blogjava.net/leeguannan/archive/2007/11/29/164044.html" target="_blank">http://www.blogjava.net/leeguannan/archive/2007/11/29/164044.html</a><img src ="http://www.blogjava.net/rain1102/aggbug/175215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-14 15:12 <a href="http://www.blogjava.net/rain1102/articles/175215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2SE API读取Properties文件六种方法(转载)</title><link>http://www.blogjava.net/rain1102/articles/174544.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 11 Jan 2008 03:06:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/174544.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/174544.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/174544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/174544.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/174544.html</trackback:ping><description><![CDATA[1。使用java.util.Properties类的load()方法示例：InputStreamin=lnewBufferedInputStream(newFileInputStream(name));Propertiesp=newProperties();p.load(in);<br />
<br />
　　2。使用java.util.ResourceBundle类的getBundle()方法示例：ResourceBundlerb=ResourceBundle.getBundle(name,Locale.getDefault());<br />
<br />
　　3。使用java.util.PropertyResourceBundle类的构造函数示例：InputStreamin=newBufferedInputStream(newFileInputStream(name));ResourceBundlerb=newPropertyResourceBundle(in);<br />
<br />
　　4。使用class变量的getResourceAsStream()方法示例：InputStreamin=JProperties.class.getResourceAsStream(name);Propertiesp=newProperties();p.load(in);<br />
<br />
　　5。使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法示例：InputStreamin=JProperties.class.getClassLoader().getResourceAsStream(name);Propertiesp=newProperties();p.load(in);<br />
<br />
　　6。使用java.lang.ClassLoader类的getSystemResourceAsStream()静态方法示例：InputStreamin=ClassLoader.getSystemResourceAsStream(name);Propertiesp=newProperties();p.load(in);<br />
<br />
　　补充<br />
<br />
　　Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法示例：InputStreamin=context.getResourceAsStream(path);Propertiesp=newProperties();p.load(in);<img src ="http://www.blogjava.net/rain1102/aggbug/174544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-11 11:06 <a href="http://www.blogjava.net/rain1102/articles/174544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java单例延迟加载</title><link>http://www.blogjava.net/rain1102/articles/174541.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 11 Jan 2008 02:57:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/174541.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/174541.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/174541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/174541.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/174541.html</trackback:ping><description><![CDATA[public class Foo {<br />
&nbsp;&nbsp;&nbsp; // 似有静态内部类, 只有当有引用时, 该类才会被装载<br />
&nbsp;&nbsp;&nbsp; private static class LazyFoo {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; public static Foo foo = new Foo();<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public static Foo getInstance() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; return LazyFoo.foo;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br /><img src ="http://www.blogjava.net/rain1102/aggbug/174541.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-11 10:57 <a href="http://www.blogjava.net/rain1102/articles/174541.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaFX发现之旅：JavaFX Script With Eclipse 入门（第一部分）</title><link>http://www.blogjava.net/rain1102/articles/173978.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 09 Jan 2008 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/173978.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/173978.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/173978.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/173978.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/173978.html</trackback:ping><description><![CDATA[<a href="http://blog.eshangrao.com/index.php/2007/05/16/391-javafx-script-javafx-script-with-eclipse" target="_blank">http://blog.eshangrao.com/index.php/2007/05/16/391-javafx-script-javafx-script-with-eclipse</a><img src ="http://www.blogjava.net/rain1102/aggbug/173978.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-09 13:20 <a href="http://www.blogjava.net/rain1102/articles/173978.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse中新建一个MessageBundle.properties文件，如果输入中文保存时就会提示错误</title><link>http://www.blogjava.net/rain1102/articles/169625.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sat, 22 Dec 2007 11:10:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/169625.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/169625.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/169625.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/169625.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/169625.html</trackback:ping><description><![CDATA[MyEclipse中新建一个MessageBundle.properties文件，如果输入中文保存时就会提示错误：<br />
Save could not be completed.<br />
Reason:<br />
some characters cannot be mapped using "ISO-8859-1" character encoding.<br />
Either change the encoding or remove the characters which are not supported<br />
by the "ISO-8859-1" character encoding.<br />
<br />
解决办法：<br />
打开Eclipse的Preferences，选择General-&gt;Content Types，然后修改右面的Text下的Java Properites File的默认编码方式为UTF-8，点击Update就可以了！<img src ="http://www.blogjava.net/rain1102/aggbug/169625.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-12-22 19:10 <a href="http://www.blogjava.net/rain1102/articles/169625.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>James的安装与使用 (转载)</title><link>http://www.blogjava.net/rain1102/articles/153314.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 16 Oct 2007 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/153314.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/153314.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/153314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/153314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/153314.html</trackback:ping><description><![CDATA[<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">一、<span style="font-family: 宋体">安装：</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">1．&nbsp;<span style="font-family: 宋体">环境要求：</span></p>
<p style="margin-left: 39pt"><span style="font-family: 宋体">已安装</span><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a><span style="font-family: 宋体">平台，版本为</span>j2sdk1.4.2<span style="font-family: 宋体">，环境变量</span>JAVA_HOME<span style="font-family: 宋体">设为</span>C:"j2sdk1.4.2<span style="font-family: 宋体">；</span></p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">2．&nbsp;<span style="font-family: 宋体">下载与运行：</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">从</span>Apache<span style="font-family: 宋体">网站上下载得到一个压缩的文件</span>james-2.1-bin.zip<span style="font-family: 宋体">，大小为</span>4.44M<span style="font-family: 宋体">，将此包解压到</span>C:"James"james-2.1<span style="font-family: 宋体">下。</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">运行分为两种方式：前台直接运行、作为后台服务运行；</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 21pt; text-indent: 21pt">1&gt;<span style="font-family: 宋体">前台直接运行：</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">在</span>C:"James"james-2.1"bin<span style="font-family: 宋体">下运行</span>run.bat</p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">这是会出现：</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt">Using PHOENIX_HOME:&nbsp;&nbsp; C:"James"james-2.1</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">Using PHOENIX_TMPDIR: C:"James"james-2.1"temp</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">Using JAVA_HOME:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C:"j2sdk1.4.2</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt">Phoenix 4.0.1</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt">James 2.1</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">Remote Manager Service started plain:4555</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">POP3 Service started plain:110</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">SMTP Service started plain:25</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">NNTP Service Disabled</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">Fetch POP Disabled</p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">这是就表示</span>James<span style="font-family: 宋体">邮件服务以开启，不过</span>Window<span style="font-family: 宋体">下不能关闭控制台窗口，否者邮件服务会停止。如要克服此缺点必须使</span>James<span style="font-family: 宋体">邮件服务作为作为后台服务运行。</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt">
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">停止前台运行按</span>Ctrl+C,<span style="font-family: 宋体">会出现：</span></p>
<p style="margin-left: 45pt; text-indent: -0.05pt">JVM exiting abnormally. Shutting down Phoenix.</p>
<p style="margin-left: 45pt; text-indent: -0.05pt"><span style="font-family: 宋体">终止批处理操作吗</span>(Y/N)?</p>
<p style="margin-left: 18pt; text-indent: 21pt">2&gt;<span style="font-family: 宋体">后台服务运行：</span></p>
<p style="margin-left: 39pt"><span style="font-family: 宋体">将</span>C:"James"james-2.1"conf<span style="font-family: 宋体">目录下的</span>wrapper.conf<span style="font-family: 宋体">拷贝到</span>C:"James"james-2.1"bin<span style="font-family: 宋体">即包含</span>wrapper.exe<span style="font-family: 宋体">的目录下，运行：</span></p>
<p style="margin-left: 36pt; text-indent: 6pt">wrapper.exe&nbsp;&nbsp;&nbsp; -i&nbsp;&nbsp;&nbsp;&nbsp; C:"James"james-2.1"bin"wrapper.conf&nbsp;</p>
<p style="margin-left: 36pt; text-indent: 3pt"><span style="font-family: 宋体">然后在控制面板中开启服务或重启即可。</span></p>
<p style="margin-left: 36pt; text-indent: 3pt">
<p style="margin-left: 36pt; text-indent: 3pt"><span style="font-family: 宋体">卸载后台服务：</span></p>
<p style="margin-left: 36pt; text-indent: 3pt"><span style="font-family: 宋体">到</span>C:"James"james-2.1"bin<span style="font-family: 宋体">即包含</span>wrapper.exe<span style="font-family: 宋体">的目录下，运行：</span></p>
<p style="margin-left: 36pt; text-indent: 3pt">wrapper.exe&nbsp;&nbsp;&nbsp;&nbsp; -r &nbsp;&nbsp; C:"James"james-2.1"bin"wrapper.conf</p>
<p style="margin-left: 39pt; text-indent: -18pt; tab-stops: list 39.0pt">3．&nbsp;&nbsp;</p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">二、<span style="font-family: 宋体">配置：</span></p>
<p style="margin-left: 21pt">1&gt;<span style="color: blue; font-family: 宋体">服务器端配置</span><span style="font-family: 宋体">（邮件服务器的名字假设叫</span>EmailServer<span style="font-family: 宋体">，服务器管理员名</span>Admin<span style="font-family: 宋体">）</span></p>
<p style="margin-left: 31.5pt; text-indent: -10.5pt; text-align: left" align="left"><span style="font-family: 宋体">首先停止已开启的</span>James<span style="font-family: 宋体">邮件服务，然后打开文件</span>C:"James"james-2.1"apps"james"SAR-INF"config.xml<span style="font-family: 宋体">。</span></p>
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">&#216;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">在</span>config.xml<span style="font-family: 宋体">文件中，找到</span>Postmaster@localhost<span style="font-family: 宋体">，把此项改为</span>Admin@EmailServer<span style="font-family: 宋体">，同时，找到位于</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">&lt;!--&nbsp;By default, the servername 'localhost' is specified. This can be removed, if required. &nbsp;&nbsp;--&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">&nbsp;--&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;Warning: If you are using fetchpop it is important to include the&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;fetched domains in the server name list to prevent looping.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;servernames autodetect="true" autodetectIP="true"&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;CONFIRM? </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">&nbsp;&nbsp;--&gt; </span>
<p style="margin-left: 21pt">&nbsp;&lt;servername&gt;<strong><u><span style="font-size: 12pt"> localhost </span></u></strong>&lt;/servername&gt; </p>
<p style="margin-left: 21pt">&nbsp;&lt;/servernames&gt;</p>
<p style="margin-left: 21pt"><span style="font-family: 宋体">的</span>localhost<span style="font-family: 宋体">，把此项改为</span>EmailServer<span style="font-family: 宋体">。这样就可以让其它机器也能访问邮件系统。</span></p>
<p style="margin-left: 21pt">
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">&#216;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span>DNS<span style="font-family: 宋体">配置：找到同上文件中</span><strong>&lt;dnsserver&gt;</strong><span style="font-family: 宋体">段中的如下程序段：</span></p>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- <strong>&lt;dnsserver&gt;</strong> </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;servers&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;CONFIRM?&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!-- Enter ip address of your DNS server, one IP address per server&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt"><span style="font-size: 9pt">- &lt;!--&nbsp;element.&nbsp;The default configuration assumes a DNS server on the localhost.&nbsp;&nbsp; --&gt; </span>
<p style="margin-left: 21pt">&nbsp;&lt;server&gt;<strong><u><span style="font-size: 12pt">127.0.0.1</span></u></strong>&lt;/server&gt; </p>
<p style="margin-left: 21pt">&nbsp;&lt;/servers&gt;</p>
<p style="margin-left: 21pt">&nbsp;&lt;authoritative&gt;false&lt;/authoritative&gt; </p>
<p style="margin-left: 21pt">&nbsp;&lt;/dnsserver&gt;</p>
<p style="margin-left: 21pt"><span style="font-family: 宋体">将</span>127.0.0.1<span style="font-family: 宋体">的位置填入</span>DNS<span style="font-family: 宋体">服务器的</span>IP<span style="font-family: 宋体">地址；</span></p>
<p style="margin-left: 21pt">
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">&#216;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">修改管理员密码：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">找到同上文件中的</span>&lt;administrator_accounts&gt;<span style="font-family: 宋体">段，如下程序段</span></p>
<p style="margin-left: 42pt">- &lt;administrator_accounts&gt;</p>
<p style="margin-left: 42pt"><span style="font-size: 9pt">- &lt;!--&nbsp;CHECKME! </span>
<p style="margin-left: 42pt"><span style="font-size: 9pt">&nbsp;--&gt; </span>
<p style="margin-left: 42pt"><span style="font-size: 9pt">- &lt;!--&nbsp;Change the default login/password. </span>
<p style="margin-left: 42pt"><span style="font-size: 9pt">&nbsp;--&gt; </span>
<p style="margin-left: 42pt">&nbsp;&lt;account login="<u>root</u>" password="<u>root</u>" /&gt; </p>
<p style="margin-left: 42pt">&nbsp;&lt;/administrator_accounts&gt;</p>
<p style="margin-left: 42pt">
<p style="margin-left: 42pt"><span style="font-family: 宋体">将默认用户名</span>root<span style="font-family: 宋体">与密码</span>root<span style="font-family: 宋体">修改为需要的值</span> </p>
<p style="margin-left: 42pt">
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-family: Wingdings">&#216;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">修改</span>telnet<span style="font-family: 宋体">管理程序登录端口</span> <span style="font-family: 宋体">：（默认为</span>4555<span style="font-family: 宋体">）</span></p>
<p style="margin-left: 21pt; text-indent: 21pt"><span style="font-family: 宋体">找到同上文件中的</span>&lt;remotemanager&gt;<span style="font-family: 宋体">段下的</span>port<span style="font-family: 宋体">如下程序段</span></p>
<p style="margin-left: 42pt">- &lt;remotemanager&gt;</p>
<p style="margin-left: 42pt">&nbsp;&lt;port&gt;<u>4555</u>&lt;/port&gt; </p>
<p style="margin-left: 42pt">- &lt;!--&nbsp;&nbsp; Uncomment this if you want to bind to a specific inetaddress </p>
<p style="margin-left: 42pt">&nbsp;--&gt; </p>
<p style="margin-left: 60pt; text-indent: -18pt; tab-stops: list 60.0pt">-<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&lt;!--</p>
<p style="margin-left: 42pt"><span style="font-family: 宋体">将</span>&lt;port&gt;<u>4555</u>&lt;/port&gt;<span style="font-family: 宋体">之间的端口号</span>4555<span style="font-family: 宋体">改为需要的端口。</span></p>
<p>
<p style="margin-left: 21pt">2&gt; <span style="color: blue; font-family: 宋体">客户端配置</span><span style="font-family: 宋体">：（略）</span></p>
<p style="margin-left: 21pt">
<p style="margin-left: 21pt">3&gt;<span style="color: blue; font-family: 宋体">帐号管理</span></p>
<p style="margin-left: 21pt">James<span style="font-family: 宋体">的账号管理是通过</span>telnet<span style="font-family: 宋体">完成的，登录命令为：</span></p>
<p style="margin-left: 21pt">
<p style="margin-left: 21pt">telnet EmailServer 4555</p>
<p style="margin-left: 21pt">
<p style="margin-left: 21pt"><span style="font-family: 宋体">其中</span>EmailServer<span style="font-family: 宋体">也可以换成</span>IP<span style="font-family: 宋体">，</span>4555<span style="font-family: 宋体">是端口号。登录时需要用户名和密码，开始默认的用户名和密码均为</span>root<span style="font-family: 宋体">。若登录成功，提示如下：</span></p>
<p style="margin-left: 21pt; text-indent: 21pt">JAMES Remote Administration Tool 2.1</p>
<p style="margin-left: 21pt; text-indent: 21pt">Please enter your login and password</p>
<p style="margin-left: 21pt; text-indent: 21pt">Login id:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">此时输入</span>root<span style="font-family: 宋体">用户名</span>,<span style="font-family: 宋体">然后会出现：</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Password:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">输入密码</span>root</p>
<p><span style="font-family: 宋体">注意：在有些操作系统如</span>Windows2000<span style="font-family: 宋体">上，用户输入均不显示。</span></p>
<p>
<p>telnet<span style="font-family: 宋体">命令列表：</span></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none; border-collapse: collapse" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>help</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">显示帮助</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>Listusers</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">列出目前存在的账户</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>Countusers</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">显示目前存在的账户的数量</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>addusers [<span style="font-family: 宋体">用户名</span>] [<span style="font-family: 宋体">密码</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">添加新用户</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>verify [<span style="font-family: 宋体">用户名</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">验证特定用户是否存在</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>deluser [<span style="font-family: 宋体">用户名</span>]&nbsp;&nbsp;&nbsp; </p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">删除已存在用户</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>setpassword [<span style="font-family: 宋体">用户名</span>] [<span style="font-family: 宋体">密码</span>]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">设置某一用户的密码</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>setalias [<span style="font-family: 宋体">别名</span>] [<span style="font-family: 宋体">用户名</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">从本地将</span>[<span style="font-family: 宋体">别名</span>]<span style="font-family: 宋体">的所有邮件转寄</span>[<span style="font-family: 宋体">用户名</span>]</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>unsetalias [<span style="font-family: 宋体">别名</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">取消</span>setalias<span style="font-family: 宋体">设置</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>setforwarding [<span style="font-family: 宋体">用户名</span>] [email<span style="font-family: 宋体">地址</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">将</span>[<span style="font-family: 宋体">用户名</span>]<span style="font-family: 宋体">的邮件转寄指定</span>[email<span style="font-family: 宋体">地址</span>]</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>unsetforwarding [<span style="font-family: 宋体">用户名</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">取消</span>setforwarding<span style="font-family: 宋体">设置</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>user [<span style="font-family: 宋体">资源</span>]</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">变为另一用户的资源</span></p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>shutdown&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">停止当前</span>James<span style="font-family: 宋体">邮件服务的</span>JVM<span style="font-family: 宋体">程序</span>(<span style="font-family: 宋体">对于</span>James<span style="font-family: 宋体">为后台服务时，用此命令很方便</span>)</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: windowtext 1pt solid; width: 176.4pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="235">
            <p>Quit</p>
            </td>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 249.7pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="333">
            <p><span style="font-family: 宋体">断开</span>telnet<span style="font-family: 宋体">连接</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p>
<p style="margin-left: 21pt">4&gt;<span style="color: blue; font-family: 宋体">用户信息的数据库存储</span></p>
<p>James<span style="font-family: 宋体">邮件用户的用户信息默认保存在</span>apps"james"var"users<span style="font-family: 宋体">目录下，通过修改配置文件</span>apps"james"SAR-INF"config.xml<span style="font-family: 宋体">，可以把用户信息保存到数据库中，配置方法如下：</span></p>
<p><span style="font-family: 宋体">假设使用的是</span>MySQL<span style="font-family: 宋体">数据库：</span></p>
<p>
<p><span style="font-family: 宋体">第一步：首先将</span>MySQL<span style="font-family: 宋体">的驱动程序（例如：</span>mysql-connector-java-3.1.6-bin.jar<span style="font-family: 宋体">）考到</span>james<span style="font-family: 宋体">的</span>lib<span style="font-family: 宋体">目录下（例如：</span>D:"james"lib<span style="font-family: 宋体">）</span></p>
<p>
<p><span style="font-family: 宋体">第二步：在</span>MySQL<span style="font-family: 宋体">中新建一个数据库</span>mail<span style="font-family: 宋体">；</span></p>
<p>
<p><span style="font-family: 宋体">第三步：打开</span>config.xml<span style="font-family: 宋体">，找到</span>&lt;users-store&gt;<span style="font-family: 宋体">这一项，此面默认的内容为：</span></p>
<table style="background: #d9d9d9" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 402.75pt; padding-top: 0cm" valign="top" width="537">
            <p>&lt;repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;destination URL="file://var/users/"/&gt;<br />
            &lt;/repository&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-family: 宋体">需要修改为：</span></p>
<table style="background: #d9d9d9" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 402.75pt; padding-top: 0cm" valign="top" width="537">
            <p>&lt;repository name="LocalUsers"</p>
            <p>&nbsp;class="org.apache.james.userrepository.JamesUsers<strong>Jdbc</strong>Repository" destinationURL="db://maildb/users"&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;sqlFile&gt;file://conf/sqlResources.xml&lt;/sqlFile&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/repository&gt;</p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-family: 宋体">其实如不修改也行，因为文件下面也有实例，不过是用</span>&lt;!-- <span style="font-family: 宋体">和</span> --&gt; <span style="font-family: 宋体">注释掉的，打开即可；记住把</span></p>
<p>&lt;repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;destination URL="file://var/users/"/&gt;<br />
&lt;/repository&gt;</p>
<p><span style="font-family: 宋体">用</span>&lt;!-- <span style="font-family: 宋体">和</span> --&gt; <span style="font-family: 宋体">注释掉；</span></p>
<p><span style="font-family: 宋体">通过修改，我们就把用户信息的存储介质从</span>file<span style="font-family: 宋体">改成了</span>db<span style="font-family: 宋体">，</span>&lt;sqlFile&gt;<span style="font-family: 宋体">是指明了在</span>db<span style="font-family: 宋体">中的数据表结构及相关数据库信息。</span></p>
<p>
<p><span style="font-family: 宋体">第四步：仍然是</span>config.xml<span style="font-family: 宋体">，找到</span>&lt;data-sources&gt;<span style="font-family: 宋体">项，默认内容为空，把此项内容修改为：</span></p>
<table style="background: #d9d9d9" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="padding-right: 0cm; padding-left: 0cm; padding-bottom: 0cm; width: 402.75pt; padding-top: 0cm" valign="top" width="537">
            <p>&lt;data-source name="maildb" class="org.apache.james.util.mordred.JdbcDataSource"&gt;<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; &lt;driver&gt;org.gjt.mm.mysql.Driver&lt;/driver&gt;<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; &lt;dburl&gt;jdbc:mysql://127.0.0.1/<span style="color: blue">mail&lt;/dburl&gt;<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; &lt;user&gt;root&lt;/user&gt;<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; &lt;password&gt;&lt;/password&gt;<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; &lt;max&gt;20&lt;/max&gt;<br />
            &lt;/data-source&gt;</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p><span style="font-family: 宋体">或打开文件下面实例的</span>&lt;!-- <span style="font-family: 宋体">和</span> --&gt; <span style="font-family: 宋体">注释</span></p>
<p>&lt;driver&gt;<span style="font-family: 宋体">是指</span>MySQL<span style="font-family: 宋体">的</span>JDBC<span style="font-family: 宋体">驱动，注意这个默认的</span>&lt;driver&gt;<span style="font-family: 宋体">是有问题的，要改成</span>MySQL<span style="font-family: 宋体">的驱动程序中</span>Driver.class<span style="font-family: 宋体">的路径，即：</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: blue">&lt;driver&gt;com.mysql.jdbc.Driver&lt;/driver&gt; </span></span>
<p>&lt;dburl&gt;<span style="font-family: 宋体">指数据库的访问路径，</span>IP<span style="font-family: 宋体">后的</span><span style="color: blue">mail</span><span style="font-family: 宋体">即</span>MySQL<span style="font-family: 宋体">中<span style="color: blue">新建数据库名</span>，接下来是用户名、密码及最大连接数。</span></p>
<p>
<p><span style="font-family: 宋体">再次启动时，</span>james<span style="font-family: 宋体">将在</span>mail<span style="font-family: 宋体">数据库中自动创建有关用户的表格。</span></p>
<p>
<p><span style="font-family: 宋体">至此，数据库配置完成，启动</span>James<span style="font-family: 宋体">，若正常无误，请通过</span>telnet<span style="font-family: 宋体">添加一个新用户，比如</span>adduser holen 123456<span style="font-family: 宋体">，然后检查</span>MySQL<span style="font-family: 宋体">中的</span>mail<span style="font-family: 宋体">数据库，下面将有一个表</span>users<span style="font-family: 宋体">，这是</span>James<span style="font-family: 宋体">根据</span>file://conf/sqlResources.xml<span style="font-family: 宋体">的内容创建的。</span></p>
<p><span style="font-family: 宋体">通过以上配置，</span>James<span style="font-family: 宋体">的用户信息就可以保存在数据库中了。</span></p>
<p><span style="font-family: 宋体">注：修改以前的账户会丢失！</span></p>
<p>
<p>
<p style="margin-left: 21pt; text-indent: -21pt; tab-stops: list 21.0pt">一、FAQ</p>
<p><span style="color: blue">1</span><span style="color: blue; font-family: 宋体">、</span><span style="color: blue; font-family: 宋体">在启动</span><span style="color: blue">james</span><span style="color: blue; font-family: 宋体">时，提示</span><span style="color: blue">POP3</span><span style="color: blue; font-family: 宋体">或</span><span style="color: blue">SMTP</span><span style="color: blue; font-family: 宋体">不能使用？</span>
<p><span style="font-family: 宋体">请检查一下，看&#8220;管理工具—</span>&gt;<span style="font-family: 宋体">服务&#8221;里面，是不是启动了别的邮件服务器，已将</span>110<span style="font-family: 宋体">或</span>25<span style="font-family: 宋体">端口占用了。</span></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">实例：</span></p>
<p style="margin-left: 35.9pt">james<span style="font-family: 宋体">前台直接运行时出错：</span></p>
<p style="margin-left: 35.9pt">ERROR&nbsp;&nbsp; 2005-08-25 08:58:38.642 [Phoenix.] (): Component named "smtpserver" failed to pass through the Initialization stage. (Reason: <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.net.BindException: Address already in use: JVM_Bind).</p>
<p style="margin-left: 35.9pt">
<p style="margin-left: 35.9pt">ERROR&nbsp;&nbsp; 2005-08-25 08:58:38.652 [Phoenix.] (): There was an error running phase "startup" for Block named "smtpserver". (Reason: Component named "smtpserver" failed to pass through the Initialization stage. (Reason: <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.net.BindException: Address already in use: JVM_Bind).).</p>
<p style="margin-left: 35.9pt">
<p style="margin-left: 35.9pt">org.apache.excalibur.containerkit.lifecycle.LifecycleException: Component named "smtpserver" failed to pass through the Initialization stage. (Reason: <a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>.net.BindException: Address already in use: JVM_Bind).</p>
<p style="margin-left: 35.9pt">
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">原因：</span></p>
<p style="margin-left: 35.9pt">&nbsp;james<span style="font-family: 宋体">默认设置不允许在同一台机器上跑两个邮件服务器进程。必须关掉另一个！</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">检测方法：</span></p>
<p style="margin-left: 35.9pt">console<span style="font-family: 宋体">界面下：</span></p>
<p style="margin-left: 35.9pt">&nbsp;d:&gt; telnet <span style="font-family: 宋体">主机名</span> 25<span style="font-family: 宋体">（或</span>110<span style="font-family: 宋体">）</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">如果可以登录，出现</span></p>
<p style="margin-left: 35.9pt">&nbsp;220 <span style="font-family: 宋体">主机名</span> Microsoft ESMTP MAIL Service, Version: 6.0.2600.1106 ready at&nbsp;Thu,</p>
<p style="margin-left: 35.9pt">&nbsp;25 Aug 2005 14:14:36 +0800</p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">则说明此机器上已有一台邮件服务器在运行。</span></p>
<p style="margin-left: 35.9pt">
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">解决：</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">检查</span>Windows<span style="font-family: 宋体">上运行服务：</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">跨网传输电子邮件的服务</span>Simple Mail Transfer Protocol (SMTP)<span style="font-family: 宋体">，是否启动</span></p>
<p style="margin-left: 35.9pt"><span style="font-family: 宋体">如启动关闭之！</span></p>
<p>
<p><span style="color: blue">2</span><span style="color: blue; font-family: 宋体">、</span><span style="color: blue"> JAVA_HOME</span><span style="color: blue; font-family: 宋体">找不到？</span>
<p><span style="font-family: 宋体">请在</span>run.bat<span style="font-family: 宋体">中指定</span>JAVA_HOME<span style="font-family: 宋体">，若还不行，请在&#8220;我的电脑—</span>&gt;<span style="font-family: 宋体">系统—</span>&gt;<span style="font-family: 宋体">高级—</span>&gt;<span style="font-family: 宋体">环境变量&#8221;中添加一项</span>JAVA_HOME<span style="font-family: 宋体">。</span></p>
<p>
<p><span style="color: blue">3</span><span style="color: blue; font-family: 宋体">、</span><span style="color: blue; font-family: 宋体">服务器启动正常，但客户端不能收发邮件？</span>
<p><span style="font-family: 宋体">请检查客户端配置是否正常，参照前面所讲，另外，请检查</span>james<span style="font-family: 宋体">下的</span>config.xml<span style="font-family: 宋体">，是否把</span>localhost<span style="font-family: 宋体">改成了机器名。</span></p>
<p>
<p><span style="color: blue">4</span><span style="color: blue; font-family: 宋体">、修改为数据库储存后，</span><span style="color: blue">james</span><span style="color: blue; font-family: 宋体">启动出错：</span>
<p><span style="font-family: 宋体">一般是数据库驱动有错。检查一下</span></p>
<p>&lt;data-source name="maildb" class="org.apache.james.util.mordred.JdbcDataSource"&gt;<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; <strong><span style="color: blue">&lt;driver&gt;org.gjt.mm.mysql.Driver&lt;/driver&gt;</strong><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; &lt;dburl&gt;jdbc:mysql://127.0.0.1/mail&lt;/dburl&gt;<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; &lt;user&gt;root&lt;/user&gt;<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; &lt;password&gt;&lt;/password&gt;<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; &lt;max&gt;20&lt;/max&gt;<br />
&lt;/data-source&gt;</span></p>
<p><span style="font-family: 宋体">的</span><strong><span style="color: blue">&lt;driver&gt;org.gjt.mm.mysql.Driver&lt;/driver&gt;</span></strong><span style="font-family: 宋体">是否对</span></p><img src ="http://www.blogjava.net/rain1102/aggbug/153314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-10-16 16:42 <a href="http://www.blogjava.net/rain1102/articles/153314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java工具篇</title><link>http://www.blogjava.net/rain1102/articles/129777.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 12 Jul 2007 02:55:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/129777.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/129777.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/129777.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/129777.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/129777.html</trackback:ping><description><![CDATA[<h3><a name=Struts2%2BSpring2%2BJPA%2BAJAX-Prerequisites></a>Prerequisites</h3>
<ul>
    <li><span class=nobr><a title="Visit page outside Confluence" href="http://struts.apache.org/2.x/" rel=nofollow><font color=#810081><u>Struts 2<sup><img class=rendericon height=7 alt="" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" width=7 align=absMiddle border=0></sup></u></font></a></span>
    <li><span class=nobr><a title="Visit page outside Confluence" href="http://tomcat.apache.org/download-55.cgi" rel=nofollow><font color=#0000ff><u>Tomcat 5.5<sup><img class=rendericon height=7 alt="" src="http://cwiki.apache.org/confluence/images/icons/linkext7.gif" width=7 align=absMiddle border=0></sup></u></font></a></span>
    <li><span class=nobr><a title="V