﻿<?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-MyJava</title><link>http://www.blogjava.net/Sprite-bei/</link><description>&lt;font size="3"&gt;&lt;br&gt;&lt;font color="#ff6600"&gt;天行健  君子以自强不息&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 18:57:33 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 18:57:33 GMT</pubDate><ttl>60</ttl><item><title>本Blog已转至http://www.blogjava.net/zht</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/07/09/129082.html</link><dc:creator>aaabbb</dc:creator><author>aaabbb</author><pubDate>Mon, 09 Jul 2007 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/07/09/129082.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/129082.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/07/09/129082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/129082.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/129082.html</trackback:ping><description><![CDATA[&nbsp;&nbsp; 本Blog已转至<a href="http://www.blogjava.net/zht">http://www.blogjava.net/zht</a>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/129082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">aaabbb</a> 2007-07-09 16:42 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/07/09/129082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Swing 多线程事件处理进度条和Observer的一个具体应用</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/04/17/111221.html</link><dc:creator>aaabbb</dc:creator><author>aaabbb</author><pubDate>Tue, 17 Apr 2007 03:44:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/04/17/111221.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/111221.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/04/17/111221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/111221.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/111221.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Swing的事件处理中，对于非常费时的处理如果不用多线程会造成主界面的阻塞，即界面一片白色，这样非常不好的，也是不提倡的，而起用多线程进行事件处理又面临一个问题即如果通知用户事件处理的进度，是否处理完成，所以最好在处理的过程中给用户一提示，标明处理的进度信息。这种提示可以用进度条的信息来表示出来，以下就是一个用进度条来标示事件...&nbsp;&nbsp;<a href='http://www.blogjava.net/Sprite-bei/archive/2007/04/17/111221.html'>阅读全文</a><img src ="http://www.blogjava.net/Sprite-bei/aggbug/111221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">aaabbb</a> 2007-04-17 11:44 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/04/17/111221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式之Observer</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/04/16/110976.html</link><dc:creator>aaabbb</dc:creator><author>aaabbb</author><pubDate>Mon, 16 Apr 2007 07:34:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/04/16/110976.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/110976.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/04/16/110976.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/110976.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/110976.html</trackback:ping><description><![CDATA[<p><span>Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,Observer(观察者)模式是比较常用的一个模式,尤其在界面设计中应用广泛,而本站所关注的是Java在电子商务系统中应用,因此想从电子商务实例中分析Observer的应用.</span></p>
<p>虽然网上商店形式多样<span>,每个站点有自己的特色,但也有其一般的共性,单就"商品的变化,以便及时通知订户"这一点,是很多网上商店共有的模式,这一模式类似Observer patern.</span></p>
<p>具体的说<span>,如果网上商店中商品在名称 价格等方面有变化,如果系统能自动通知会员,将是网上商店区别传统商店的一大特色.这就需要在商品product中加入Observer这样角色,以便product细节发生变化时,Observer能自动观察到这种变化,并能进行及时的update或notify动作.</span></p>
<p><span></span></p>
<p><span>Java的API还为为我们提供现成的Observer接口Java.util.Observer.我们只要直接使用它就可以.</span></p>
<p>我们必须<span>extends Java.util.Observer才能真正使用它:<br>1.提供Add/Delete observer的方法;<br>2.提供通知(notisfy) 所有observer的方法;</span></p>
<table cellSpacing=3 cellPadding=0 width="80%" bgColor=#cccccc border=0>
    <tbody>
        <tr>
            <td>
            <p><span>import java.util.Observable;</span></p>
            <p><span>public class product extends Observable {</span></p>
            <p><span>&nbsp;private String name;</span></p>
            <p><span>&nbsp;private float price;<br>&nbsp;public product(){<br>&nbsp;}</span></p>
            <p><span>&nbsp;public String getName() {<br>&nbsp;&nbsp;return name;<br>&nbsp;}</span></p>
            <p><span>&nbsp;public void setName(String name) {<br>&nbsp;&nbsp;this.name = name;<br>&nbsp;&nbsp;//设置变化点 <br>&nbsp;&nbsp;setChanged();<br>&nbsp;&nbsp;notifyObservers(name);</span></p>
            <p><span>&nbsp;}</span></p>
            <p><span>&nbsp;public float getPrice() {<br>&nbsp;&nbsp;return price;<br>&nbsp;}</span></p>
            <p><span>&nbsp;public void setPrice(float price) {<br>&nbsp;&nbsp;this.price = price;<br>&nbsp;&nbsp;//设置变化点<br>&nbsp;&nbsp;setChanged();<br>&nbsp;&nbsp;notifyObservers(new Float(price));</span></p>
            <p><span>&nbsp;}</span></p>
            <p><span>&nbsp;//以下可以是数据库更新 插入命令.<br>&nbsp;public void saveToDb() {<br>&nbsp;&nbsp;//&nbsp; .....................</span></p>
            <p><span>&nbsp;}</span></p>
            <p><span>&nbsp;public static void main(String[] args) {<br>&nbsp;&nbsp;product p=new product();<br>&nbsp;&nbsp;p.addObserver(new NameObserver());<br>&nbsp;&nbsp;p.addObserver(new PriceObserver());<br>&nbsp;&nbsp;p.setPrice(100);<br>&nbsp; p.setName("name");<br>&nbsp;}<br>}</span></p>
            </td>
        </tr>
    </tbody>
</table>
<p><span><br>我们注意到,在product类中 的setXXX方法中,我们设置了 notify(通知)方法, 当调用setXXX,实际上就触发了notisfyObservers方法,这将通知相应观察者应该采取行动了.</span></p>
<p>下面看看这些观察者的代码<span>,他们究竟采取了什么行动:</span></p>
<table cellSpacing=3 cellPadding=0 width="99%" border=0>
    <tbody>
        <tr>
            <td>
            <p><span>//观察者NameObserver主要用来对产品名称(name)进行观察的<br>public class NameObserver implements Observer{</span></p>
            <p>　　<span>private String name=null;</span></p>
            <p>　　<span>public void update(Observable obj,Object arg){<br><br>　　　　if (arg <a href="http://www-900.ibm.com/developerWorks/java/l-leditor/index.shtml" target=_blank>instanceof</a> String){</span></p>
            <p>　　　　<span> name=(String)arg;<br>　　　　 //产品名称改变值在name中<br>　　　　 System.out.println("NameObserver :name changet to "+name);</span></p>
            <p>　　　　<span>}</span></p>
            <p>　　<span>}</span></p>
            <p><span>}</span></p>
            <p><span>//观察者PriceObserver主要用来对产品价格(price)进行观察的<br>public class PriceObserver implements Observer{</span></p>
            <p>　　<span>private float price=0;</span></p>
            <p>　　<span>public void update(Observable obj,Object arg){<br><br>　　　　if (arg instanceof Float){</span></p>
            <p>　　　　<span> price=((Float)arg).floatValue();<br>　　<br>　　　　 System.out.println("PriceObserver :price changet to "+price);</span></p>
            <p>　　　　<span>}</span></p>
            <p>　　<span>}</span></p>
            <p><span>}</span></p>
            </td>
        </tr>
    </tbody>
</table>
输出结果如下：<br>PriceObserver :price changet to 100.0<br>NameObserver :name changet to name<br>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/110976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">aaabbb</a> 2007-04-16 15:34 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/04/16/110976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java语言编码规范(Java Code Conventions)</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/04/16/110878.html</link><dc:creator>aaabbb</dc:creator><author>aaabbb</author><pubDate>Mon, 16 Apr 2007 01:04:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/04/16/110878.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/110878.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/04/16/110878.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/110878.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/110878.html</trackback:ping><description><![CDATA[<p class=title><a name=1>1 介绍(Introduction)</p>
<p class=title><a name=11>1.1 为什么要有编码规范(Why Have Code Conventions)</p>
<p>编码规范对于程序员而言尤为重要，有以下几个原因：</p>
<p>- 一个软件的生命周期中，80%的花费在于维护<br>- 几乎没有任何一个软件，在其整个生命周期中，均由最初的开发人员来维护<br>- 编码规范可以改善软件的可读性，可以让程序员尽快而彻底地理解新的代码<br>- 如果你将源码作为产品发布，就需要确任它是否被很好的打包并且清晰无误，一如你已构建的其它任何产品 </p>
<p>为了执行规范，每个软件开发人员必须一致遵守编码规范。每个人。</p>
<p class=title><a name=12>1.2 版权声明(Acknowledgments)</p>
<p>本文档反映的是Sun MicroSystems公司，Java语言规范中的编码标准部分。主要贡献者包括：Peter King，Patrick Naughton，Mike DeMoney，Jonni Kanerva，Kathy Walrath以及Scott Hommel。</p>
<p>本文档现由Scott Hommel维护，有关评论意见请发至shommel@eng.sun.com</p>
<p class=title><a name=2>2 文件名(File Names)</p>
<p>这部分列出了常用的文件名及其后缀。</p>
<p class=title><a name=21>2.1 文件后缀(File Suffixes)</p>
<p>Java程序使用下列文件后缀：</p>
<p>
<table class=text border=1>
    <tbody>
        <tr>
            <td>文件类别</td>
            <td>文件后缀</td>
        </tr>
        <tr>
            <td>Java源文件</td>
            <td>.java</td>
        </tr>
        <tr>
            <td>Java字节码文件</td>
            <td>.class</td>
        </tr>
    </tbody>
</table>
</p>
<p class=title><a name=22>2.2 常用文件名(Common File Names)</p>
<p>常用的文件名包括：</p>
<p>
<table class=text border=1>
    <tbody>
        <tr>
            <td>文件名</td>
            <td>用途</td>
        </tr>
        <tr>
            <td>GNUmakefile</td>
            <td>makefiles的首选文件名。我们采用gnumake来创建（build）软件。</td>
        </tr>
        <tr>
            <td>README</td>
            <td>概述特定目录下所含内容的文件的首选文件名</td>
        </tr>
    </tbody>
</table>
</p>
<p class=title><a name=3>3 文件组织(File Organization)</p>
<p>一个文件由被空行分割而成的段落以及标识每个段落的可选注释共同组成。超过2000行的程序难以阅读，应该尽量避免。"Java源文件范例"提供了一个布局合理的Java程序范例。</p>
<p class=title></a>3.1 Java源文件(Java Source Files)</p>
<p>每个Java源文件都包含一个单一的公共类或接口。若私有类和接口与一个公共类相关联，可以将它们和公共类放入同一个源文件。公共类必须是这个文件中的第一个类或接口。</p>
<p>Java源文件还遵循以下规则：</p>
<p>- 开头注释（参见"<u><font color=#800080>开头注释</font></u>"）<br>- 包和引入语句（参见"<u><font color=#800080>包和引入语句</font></u>"）<br>- 类和接口声明（参见"<u><font color=#800080>类和接口声明</font></u>"） </p>
<p class=title><a name=311>3.1.1 开头注释(Beginning Comments)</p>
<p>所有的源文件都应该在开头有一个C语言风格的注释，其中列出类名、版本信息、日期和版权声明：</p>
<p>
<pre>  /*
* Classname
*
* Version information
*
* Date
*
* Copyright notice
*/
</pre>
<p>&#160;</p>
<p class=title><a name=312>3.1.2 包和引入语句(Package and Import Statements)</p>
<p>在多数Java源文件中，第一个非注释行是包语句。在它之后可以跟引入语句。例如：</p>
<p>
<pre>  package java.awt;
import java.awt.peer.CanvasPeer;
</pre>
<p>&#160;</p>
<p class=title><a name=313>3.1.3 类和接口声明(Class and Interface Declarations)</p>
<p>下表描述了类和接口声明的各个部分以及它们出现的先后次序。参见"<a href="http://morningspace.51.net/resource/javacodeconv.html#b1"><u><font color=#800080>Java源文件范例</font></u></a>"中一个包含注释的例子。</p>
<p>
<table class=text border=1>
    <tbody>
        <tr>
            <td>&nbsp;</td>
            <td>类/接口声明的各部分</td>
            <td>注解</td>
        </tr>
        <tr>
            <td>1</td>
            <td>类/接口文档注释(/**&#8230;&#8230;*/)</td>
            <td>该注释中所需包含的信息，参见"<a href="http://morningspace.51.net/resource/javacodeconv.html#52"><u><font color=#800080>文档注释</font></u></a>"</td>
        </tr>
        <tr>
            <td>2</td>
            <td>类或接口的声明</td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>3</td>
            <td>类/接口实现的注释(/*&#8230;&#8230;*/)如果有必要的话</td>
            <td>该注释应包含任何有关整个类或接口的信息，而这些信息又不适合作为类/接口文档注释。</td>
        </tr>
        <tr>
            <td>4</td>
            <td>类的(静态)变量</td>
            <td>首先是类的公共变量，随后是保护变量，再后是包一级别的变量(没有访问修饰符，access modifier)，最后是私有变量。</td>
        </tr>
        <tr>
            <td>5</td>
            <td>实例变量</td>
            <td>首先是公共级别的，随后是保护级别的，再后是包一级别的(没有访问修饰符)，最后是私有级别的。</td>
        </tr>
        <tr>
            <td>6</td>
            <td>构造器</td>
            <td>&nbsp;</td>
        </tr>
        <tr>
            <td>7</td>
            <td>方法</td>
            <td>这些方法应该按功能，而非作用域或访问权限，分组。例如，一个私有的类方法可以置于两个公有的实例方法之间。其目的是为了更便于阅读和理解代码。</td>
        </tr>
    </tbody>
</table>
</p>
<p class=title><a name=4>4 缩进排版(Indentation)</p>
<p>4个空格常被作为缩进排版的一个单位。缩进的确切解释并未详细指定(空格 vs. 制表符)。一个制表符等于8个空格(而非4个)。</p>
<p class=title><a name=41>4.1 行长度(Line Length)</p>
<p>尽量避免一行的长度超过80个字符，因为很多终端和工具不能很好处理之。</p>
<p>注意：用于文档中的例子应该使用更短的行长，长度一般不超过70个字符。</p>
<p class=title><a name=42>4.2 换行(Wrapping Lines)</p>
<p>当一个表达式无法容纳在一行内时，可以依据如下一般规则断开之：</p>
<p>- 在一个逗号后面断开<br>- 在一个操作符前面断开<br>- 宁可选择较高级别(higher-level)的断开，而非较低级别(lower-level)的断开<br>- 新的一行应该与上一行同一级别表达式的开头处对齐<br>- 如果以上规则导致你的代码混乱或者使你的代码都堆挤在右边，那就代之以缩进8个空格。 </p>
<p>以下是断开方法调用的一些例子：</p>
<p>
<pre>  someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
var = someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));
</pre>
<p>&#160;</p>
<p>以下是两个断开算术表达式的例子。前者更好，因为断开处位于括号表达式的外边，这是个较高级别的断开。</p>
<p>
<pre>  longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longname6; //PREFFER
longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longname6; //AVOID
</pre>
<p>&#160;</p>
<p>以下是两个缩进方法声明的例子。前者是常规情形。后者若使用常规的缩进方式将会使第二行和第三行移得很靠右，所以代之以缩进8个空格</p>
<p>
<pre>  //CONVENTIONAL INDENTATION
someMethod(int anArg, Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
//INDENT 8 SPACES TO AVOID VERY DEEP INDENTS
private static synchronized horkingLongMethodName(int anArg,
Object anotherArg, String yetAnotherArg,
Object andStillAnother) {
...
}
</pre>
<p>&#160;</p>
<p>if语句的换行通常使用8个空格的规则，因为常规缩进(4个空格)会使语句体看起来比较费劲。比如：</p>
<p>
<pre>  //DON&#8217;T USE THIS INDENTATION
if ((condition1 &amp;&amp; condition2)
|| (condition3 &amp;&amp; condition4)
||!(condition5 &amp;&amp; condition6)) { //BAD WRAPS
doSomethingAboutIt();             //MAKE THIS LINE EASY TO MISS
}
//USE THIS INDENTATION INSTEAD
if ((condition1 &amp;&amp; condition2)
|| (condition3 &amp;&amp; condition4)
||!(condition5 &amp;&amp; condition6)) {
doSomethingAboutIt();
}
//OR USE THIS
if ((condition1 &amp;&amp; condition2) || (condition3 &amp;&amp; condition4)
||!(condition5 &amp;&amp; condition6)) {
doSomethingAboutIt();
}
</pre>
<p>&#160;</p>
<p>这里有三种可行的方法用于处理三元运算表达式：</p>
<p>
<pre>  alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression) ? beta
: gamma;
alpha = (aLongBooleanExpression)
? beta
: gamma;
</pre>
<p>&#160;</p>
<p class=title><a name=5>5 注释(Comments)</p>
<p>Java程序有两类注释：实现注释(implementation comments)和文档注释(document comments)。实现注释是那些在C++中见过的，使用/*...*/和//界定的注释。文档注释(被称为"doc comments")是Java独有的，并由/**...*/界定。文档注释可以通过javadoc工具转换成HTML文件。</p>
<p>实现注释用以注释代码或者实现细节。文档注释从实现自由(implementation-free)的角度描述代码的规范。它可以被那些手头没有源码的开发人员读懂。</p>
<p>注释应被用来给出代码的总括，并提供代码自身没有提供的附加信息。注释应该仅包含与阅读和理解程序有关的信息。例如，相应的包如何被建立或位于哪个目录下之类的信息不应包括在注释中。</p>
<p>在注释里，对设计决策中重要的或者不是显而易见的地方进行说明是可以的，但应避免提供代码中己清晰表达出来的重复信息。多余的的注释很容易过时。通常应避免那些代码更新就可能过时的注释。</p>
<p>注意：频繁的注释有时反映出代码的低质量。当你觉得被迫要加注释的时候，考虑一下重写代码使其更清晰。</p>
<p>注释不应写在用星号或其他字符画出来的大框里。注释不应包括诸如制表符和回退符之类的特殊字符。</p>
<p class=title><a name=51>5.1 实现注释的格式(Implementation Comment Formats)</p>
<p>程序可以有4种实现注释的风格：块(block)、单行(single-line)、尾端(trailing)和行末(end-of-line)。</p>
<p class=title><a name=511>5.1.1 块注释(Block Comments)</p>
<p>块注释通常用于提供对文件，方法，数据结构和算法的描述。块注释被置于每个文件的开始处以及每个方法之前。它们也可以被用于其他地方，比如方法内部。在功能和方法内部的块注释应该和它们所描述的代码具有一样的缩进格式。</p>
<p>块注释之首应该有一个空行，用于把块注释和代码分割开来，比如：</p>
<p>
<pre>  /*
* Here is a block comment.
*/
</pre>
<p>&#160;</p>
<p>块注释可以以/*-开头，这样indent(1)就可以将之识别为一个代码块的开始，而不会重排它。</p>
<p>
<pre>  /*-
* Here is a block comment with some very special
* formatting that I want indent(1) to ignore.
*
*    one
*        two
*            three
*/
</pre>
<p>&#160;</p>
<p>注意：如果你不使用indent(1)，就不必在代码中使用/*-，或为他人可能对你的代码运行indent(1)作让步。</p>
<p>参见"<a href="http://morningspace.51.net/resource/javacodeconv.html#52"><u><font color=#800080>文档注释</font></u></a>"</p>
<p class=title><a name=512>5.1.2 单行注释(Single-Line Comments)</p>
<p>短注释可以显示在一行内，并与其后的代码具有一样的缩进层级。如果一个注释不能在一行内写完，就该采用块注释(参见"<a href="http://morningspace.51.net/resource/javacodeconv.html#511"><u><font color=#800080>块注释</font></u></a>")。单行注释之前应该有一个空行。以下是一个Java代码中单行注释的例子：</p>
<p>
<pre>  if (condition) {
/* Handle the condition. */
...
}
</pre>
<p>&#160;</p>
<p class=title><a name=513>5.1.3 尾端注释(Trailing Comments)</p>
<p>极短的注释可以与它们所要描述的代码位于同一行，但是应该有足够的空白来分开代码和注释。若有多个短注释出现于大段代码中，它们应该具有相同的缩进。</p>
<p>以下是一个Java代码中尾端注释的例子：</p>
<p>
<pre>  if (a == 2) {
return TRUE;              /* special case */
} else {
return isPrime(a);         /* works only for odd a */
}
</pre>
<p>&#160;</p>
<p class=title><a name=514>5.1.4 行末注释(End-Of-Line Comments)</p>
<p>注释界定符"//"，可以注释掉整行或者一行中的一部分。它一般不用于连续多行的注释文本；然而，它可以用来注释掉连续多行的代码段。以下是所有三种风格的例子：</p>
<p>
<pre>  if (foo &gt; 1) {
// Do a double-flip.
...
}
else {
return false;          // Explain why here.
}
//if (bar &gt; 1) {
//
//    // Do a triple-flip.
//    ...
//}
//else {
//    return false;
//}
</pre>
<p>&#160;</p>
<p class=title><a name=52>5.2 文档注释(Documentation Comments)</p>
<p>注意：此处描述的注释格式之范例，参见"<a href="http://morningspace.51.net/resource/javacodeconv.html#b1"><u><font color=#800080>Java源文件范例</font></u></a>"</p>
<p>若想了解更多，参见"How to Write Doc Comments for Javadoc"，其中包含了有关文档注释标记的信息(@return, @param, @see)：</p>
<p><a href="http://java.sun.com/javadoc/writingdoccomments/index.html"><u><font color=#0000ff>http://java.sun.com/javadoc/writingdoccomments/index.html</font></u></a></p>
<p>若想了解更多有关文档注释和javadoc的详细资料，参见javadoc的主页：</p>
<p><a href="http://java.sun.com/javadoc/index.html"><u><font color=#0000ff>http://java.sun.com/javadoc/index.html</font></u></a></p>
<p>文档注释描述Java的类、接口、构造器，方法，以及字段(field)。每个文档注释都会被置于注释定界符/**...*/之中，一个注释对应一个类、接口或成员。该注释应位于声明之前：</p>
<p>
<pre>  /**
* The Example class provides ...
*/
public class Example { ...
</pre>
<p>&#160;</p>
<p>注意顶层(top-level)的类和接口是不缩进的，而其成员是缩进的。描述类和接口的文档注释的第一行(/**)不需缩进；随后的文档注释每行都缩进1格(使星号纵向对齐)。成员，包括构造函数在内，其文档注释的第一行缩进4格，随后每行都缩进5格。</p>
<p>若你想给出有关类、接口、变量或方法的信息，而这些信息又不适合写在文档中，则可使用实现块注释(见5.1.1)或紧跟在声明后面的单行注释(见5.1.2)。例如，有关一个类实现的细节，应放入紧跟在类声明后面的实现块注释中，而不是放在文档注释中。</p>
<p>文档注释不能放在一个方法或构造器的定义块中，因为Java会将位于文档注释之后的第一个声明与其相关联。</p>
<p class=title><a name=6>6 声明(Declarations)</p>
<p class=title><a name=61>6.1 每行声明变量的数量(Number Per Line)</p>
<p>推荐一行一个声明，因为这样以利于写注释。亦即，</p>
<p>
<pre>  int level;  // indentation level
int size;   // size of table
</pre>
<p>&#160;</p>
<p>要优于，</p>
<p>int level, size; </p>
<p>不要将不同类型变量的声明放在同一行，例如：</p>
<p>
<pre>  int foo,  fooarray[];   //WRONG!
</pre>
<p>&#160;</p>
<p>注意：上面的例子中，在类型和标识符之间放了一个空格，另一种被允许的替代方式是使用制表符：</p>
<p>
<pre>  int		level;         // indentation level
int		size;          // size of table
Object	currentEntry;  // currently selected table entry
</pre>
<p>&#160;</p>
<p class=title><a name=62>6.2 初始化(Initialization)</p>
<p>尽量在声明局部变量的同时初始化。唯一不这么做的理由是变量的初始值依赖于某些先前发生的计算。</p>
<p class=title><a name=63>6.3 布局(Placement)</p>
<p>只在代码块的开始处声明变量。（一个块是指任何被包含在大括号"{"和"}"中间的代码。）不要在首次用到该变量时才声明之。这会把注意力不集中的程序员搞糊涂，同时会妨碍代码在该作用域内的可移植性。</p>
<p>
<pre>  void myMethod() {
int int1 = 0;         // beginning of method block
if (condition) {
int int2 = 0;     // beginning of "if" block
...
}
}
</pre>
<p>&#160;</p>
<p>该规则的一个例外是for循环的索引变量</p>
<p>
<pre>  for (int i = 0; i &lt; maxLoops; i++) { ... }
</pre>
<p>&#160;</p>
<p>避免声明的局部变量覆盖上一级声明的变量。例如，不要在内部代码块中声明相同的变量名：</p>
<p>
<pre>  int count;
...
myMethod() {
if (condition) {
int count = 0;     // AVOID!
...
}
...
}
</pre>
<p>&#160;</p>
<p class=title><a name=64>6.4 类和接口的声明(Class and Interface Declarations)</p>
<p>当编写类和接口是，应该遵守以下格式规则：</p>
<p>- 在方法名与其参数列表之前的左括号"("间不要有空格<br>- 左大括号"{"位于声明语句同行的末尾<br>- 右大括号"}"另起一行，与相应的声明语句对齐，除非是一个空语句，"}"应紧跟在"{"之后
<pre>  class Sample extends Object {
int ivar1;
int ivar2;
Sample(int i, int j) {
ivar1 = i;
ivar2 = j;
}
int emptyMethod() {}
...
}
</pre>
- 方法与方法之间以空行分隔
<p>&#160;</p>
<p class=title><a name=7>7 语句(Statements)</p>
<p class=title><a name=71>7.1 简单语句(Simple Statements)</p>
<p>每行至多包含一条语句，例如：</p>
<p>
<pre>  argv++;       // Correct
argc--;       // Correct
argv++; argc--;       // AVOID!
</pre>
<p>&#160;</p>
<p class=title><a name=72>7.2 复合语句(Compound Statements)</p>
<p>复合语句是包含在大括号中的语句序列，形如"{ 语句 }"。例如下面各段。</p>
<p>- 被括其中的语句应该较之复合语句缩进一个层次<br>- 左大括号"{"应位于复合语句起始行的行尾；右大括号"}"应另起一行并与复合语句首行对齐。<br>- 大括号可以被用于所有语句，包括单个语句，只要这些语句是诸如if-else或for控制结构的一部分。这样便于添加语句而无需担心由于忘了加括号而引入bug。 </p>
<p class=title><a name=73>7.3 返回语句(return Statements)</p>
<p>一个带返回值的return语句不使用小括号"()"，除非它们以某种方式使返回值更为显见。例如：</p>
<p>
<pre>  return;
return myDisk.size();
return (size ? size : defaultSize);
</pre>
<p>&#160;</p>
<p class=title><a name=74>7.4 if，if-else，if else-if else语句(if, if-else, if else-if else Statements)</p>
<p>if-else语句应该具有如下格式：</p>
<p>
<pre>  if (condition) {
statements;
}
if (condition) {
statements;
} else {
statements;
}
if (condition) {
statements;
} else if (condition) {
statements;
} else{
statements;
}
</pre>
<p>&#160;</p>
<p>注意：if语句总是用"{"和"}"括起来，避免使用如下容易引起错误的格式：</p>
<p>
<pre>  if (condition) //AVOID! THIS OMITS THE BRACES {}!
statement;
</pre>
<p>&#160;</p>
<p class=title><a name=75>7.5 for语句(for Statements)</p>
<p>一个for语句应该具有如下格式：</p>
<p>
<pre>  for (initialization; condition; update) {
statements;
}
</pre>
<p>&#160;</p>
<p>一个空的for语句(所有工作都在初始化，条件判断，更新子句中完成）应该具有如下格式：</p>
<p>
<pre>  for (initialization; condition; update);
</pre>
<p>&#160;</p>
<p>当在for语句的初始化或更新子句中使用逗号时，避免因使用三个以上变量，而导致复杂度提高。若需要，可以在for循环之前(为初始化子句)或for循环末尾(为更新子句)使用单独的语句。</p>
<p class=title><a name=76>7.6 while语句(while Statements)</p>
<p>一个while语句应该具有如下格式</p>
<p>
<pre>  while (condition) {
statements;
}
</pre>
<p>&#160;</p>
<p>一个空的while语句应该具有如下格式：</p>
<p>
<pre>  while (condition);
</pre>
<p>&#160;</p>
<p class=title><a name=77>7.7 do-while语句(do-while Statements)</p>
<p>一个do-while语句应该具有如下格式：</p>
<p>
<pre>  do {
statements;
} while (condition);
</pre>
<p>&#160;</p>
<p class=title><a name=78>7.8 switch语句(switch Statements)</p>
<p>一个switch语句应该具有如下格式：</p>
<p>
<pre>  switch (condition) {
case ABC:
statements;
/* falls through */
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}
</pre>
<p>&#160;</p>
<p>每当一个case顺着往下执行时(因为没有break语句)，通常应在break语句的位置添加注释。上面的示例代码中就包含注释/* falls through */。</p>
<p class=title><a name=79>7.9 try-catch语句(try-catch Statements)</p>
<p>一个try-catch语句应该具有如下格式：</p>
<p>
<pre>  try {
statements;
} catch (ExceptionClass e) {
statements;
}
</pre>
<p>&#160;</p>
<p>一个try-catch语句后面也可能跟着一个finally语句，不论try代码块是否顺利执行完，它都会被执行。</p>
<p>
<pre>  try {
statements;
} catch (ExceptionClass e) {
statements;
} finally {
statements;
}
</pre>
<p>&#160;</p>
<p class=title><a name=8>8 空白(White Space)</p>
<p class=title><a name=81>8.1 空行(Blank Lines)</p>
<p>空行将逻辑相关的代码段分隔开，以提高可读性。</p>
<p>下列情况应该总是使用两个空行：</p>
<p>- 一个源文件的两个片段(section)之间<br>- 类声明和接口声明之间 </p>
<p>下列情况应该总是使用一个空行：</p>
<p>- 两个方法之间<br>- 方法内的局部变量和方法的第一条语句之间<br>- 块注释（参见"<a href="http://morningspace.51.net/resource/javacodeconv.html#511"><u><font color=#800080>5.1.1</font></u></a>"）或单行注释（参见"<a href="http://morningspace.51.net/resource/javacodeconv.html#512"><u><font color=#800080>5.1.2</font></u></a>"）之前<br>- 一个方法内的两个逻辑段之间，用以提高可读性 </p>
<p class=title><a name=82>8.2 空格(Blank Spaces)</p>
<p>下列情况应该使用空格：</p>
<p>- 一个紧跟着括号的关键字应该被空格分开，例如：<br>
<pre>  while (true) {
...
}
</pre>
注意：空格不应该置于方法名与其左括号之间。这将有助于区分关键字和方法调用。<br>- 空白应该位于参数列表中逗号的后面<br>- 所有的二元运算符，除了"."，应该使用空格将之与操作数分开。一元操作符和操作数之间不因该加空格，比如：负号("-")、自增("++")和自减("--")。例如：
<pre>    a += c + d;
a = (a + b) / (c * d);
while (d++ = s++) {
n++;
}
printSize("size is " + foo + "\n");
</pre>
- for语句中的表达式应该被空格分开，例如：
<pre>    for (expr1; expr2; expr3)
</pre>
- 强制转型后应该跟一个空格，例如：
<pre>    myMethod((byte) aNum, (Object) x);
myMethod((int) (cp + 5), ((int) (i + 3)) + 1);
</pre>
<p>&#160;</p>
<p class=title><a name=9>9 命名规范(Naming Conventions)</p>
<p>命名规范使程序更易读，从而更易于理解。它们也可以提供一些有关标识符功能的信息，以助于理解代码，例如，不论它是一个常量，包，还是类。</p>
<p>
<table class=text border=1>
    <tbody>
        <tr>
            <td>标识符类型</td>
            <td>命名规则</td>
            <td>例子</td>
        </tr>
        <tr>
            <td>包(Packages)</td>
            <td>一个唯一包名的前缀总是全部小写的ASCII字母并且是一个顶级域名，通常是com，edu，gov，mil，net，org，或1981年ISO 3166标准所指定的标识国家的英文双字符代码。包名的后续部分根据不同机构各自内部的命名规范而不尽相同。这类命名规范可能以特定目录名的组成来区分部门(department)，项目(project)，机器(machine)，或注册名(login names)。</td>
            <td>com.sun.eng<br>com.apple.quicktime.v2<br>edu.cmu.cs.bovik.cheese</td>
        </tr>
        <tr>
            <td>类(Classes)</td>
            <td>命名规则：类名是个一名词，采用大小写混合的方式，每个单词的首字母大写。尽量使你的类名简洁而富于描述。使用完整单词，避免缩写词(除非该缩写词被更广泛使用，像URL，HTML)</td>
            <td>class Raster;<br>class ImageSprite;</td>
        </tr>
        <tr>
            <td>接口(Interfaces)</td>
            <td>命名规则：大小写规则与类名相似</td>
            <td>interface RasterDelegate;<br>interface Storing;</td>
        </tr>
        <tr>
            <td>方法(Methods)</td>
            <td>方法名是一个动词，采用大小写混合的方式，第一个单词的首字母小写，其后单词的首字母大写。</td>
            <td>run();<br>runFast();<br>getBackground();</td>
        </tr>
        <tr>
            <td>变量(Variables)</td>
            <td>除了变量名外，所有实例，包括类，类常量，均采用大小写混合的方式，第一个单词的首字母小写，其后单词的首字母大写。变量名不应以下划线或美元符号开头，尽管这在语法上是允许的。<br>变量名应简短且富于描述。变量名的选用应该易于记忆，即，能够指出其用途。尽量避免单个字符的变量名，除非是一次性的临时变量。临时变量通常被取名为i，j，k，m和n，它们一般用于整型；c，d，e，它们一般用于字符型。</td>
            <td>char c;<br>int i;<br>float myWidth;</td>
        </tr>
        <tr>
            <td>实例变量(Instance Variables)</td>
            <td>大小写规则和变量名相似，除了前面需要一个下划线</td>
            <td>int _employeeId;<br>String _name;<br>Customer _customer;</td>
        </tr>
        <tr>
            <td>常量(Constants)</td>
            <td>类常量和ANSI常量的声明，应该全部大写，单词间用下划线隔开。(尽量避免ANSI常量，容易引起错误)</td>
            <td>static final int MIN_WIDTH = 4;<br>static final int MAX_WIDTH = 999;<br>static final int GET_THE_CPU = 1;</td>
        </tr>
    </tbody>
</table>
</p>
<p class=title><a name=a>10 编程惯例(Programming Practices)</p>
<p class=title><a name=a1>10.1 提供对实例以及类变量的访问控制(Providing Access to Instance and Class Variables)</p>
<p>若没有足够理由，不要把实例或类变量声明为公有。通常，实例变量无需显式的设置(set)和获取(gotten)，通常这作为方法调用的边缘效应 (side effect)而产生。</p>
<p>一个具有公有实例变量的恰当例子，是类仅作为数据结构，没有行为。亦即，若你要使用一个结构(struct)而非一个类(如果java支持结构的话)，那么把类的实例变量声明为公有是合适的。</p>
<p class=title><a name=a2>10.2 引用类变量和类方法(Referring to Class Variables and Methods)</p>
<p>避免用一个对象访问一个类的静态变量和方法。应该用类名替代。例如：</p>
<p>
<pre>  classMethod();             //OK
AClass.classMethod();      //OK
anObject.classMethod();    //AVOID!
</pre>
<p>&#160;</p>
<p class=title><a name=a3>10.3 常量(Constants)</p>
<p>位于for循环中作为计数器值的数字常量，除了-1,0和1之外，不应被直接写入代码。</p>
<p class=title><a name=a4>10.4 变量赋值(Variable Assignments)</p>
<p>避免在一个语句中给多个变量赋相同的值。它很难读懂。例如：</p>
<p>
<pre>  fooBar.fChar = barFoo.lchar = 'c'; // AVOID!
</pre>
<p>&#160;</p>
<p>不要将赋值运算符用在容易与相等关系运算符混淆的地方。例如：</p>
<p>
<pre>  if (c++ = d++) {        // AVOID! (Java disallows)
...
}
</pre>
<p>&#160;</p>
<p>应该写成</p>
<p>
<pre>  if ((c++ = d++) != 0) {
...
}
</pre>
<p>&#160;</p>
<p>不要使用内嵌(embedded)赋值运算符试图提高运行时的效率，这是编译器的工作。例如：</p>
<p>
<pre>  d = (a = b + c) + r;        // AVOID!
</pre>
<p>&#160;</p>
<p>应该写成</p>
<p>
<pre>  a = b + c;
d = a + r;
</pre>
<p>&#160;</p>
<p class=title><a name=a5>10.5 其它惯例(Miscellaneous Practices)</p>
<p class=title><a name=a51>10.5.1 圆括号(Parentheses)</p>
<p>一般而言，在含有多种运算符的表达式中使用圆括号来避免运算符优先级问题，是个好方法。即使运算符的优先级对你而言可能很清楚，但对其他人未必如此。你不能假设别的程序员和你一样清楚运算符的优先级。</p>
<p>
<pre>  if (a == b &amp;&amp; c == d)     // AVOID!
if ((a == b) &amp;&amp; (c == d))  // RIGHT
</pre>
<p>&#160;</p>
<p class=title><a name=a52>10.5.2 返回值(Returning Values)</p>
<p>设法让你的程序结构符合目的。例如：</p>
<p>
<pre>  if (booleanExpression) {
return true;
} else {
return false;
}
</pre>
<p>&#160;</p>
<p>应该代之以如下方法：</p>
<p>
<pre>  return booleanExpression;
</pre>
<p>&#160;</p>
<p>类似地：</p>
<p>
<pre>  if (condition) {
return x;
}
return y;
</pre>
<p>&#160;</p>
<p>应该写做：</p>
<p>
<pre>  return (condition ? x : y);
</pre>
<p>&#160;</p>
<p class=title><a name=a53>10.5.3 条件运算符"?"前的表达式(Expressions before '?' in the Conditional Operator)</p>
<p>如果一个包含二元运算符的表达式出现在三元运算符" ? : "的"?"之前，那么应该给表达式添上一对圆括号。例如：</p>
<p>
<pre>  (x &gt;= 0) ? x : -x;
</pre>
<p>&#160;</p>
<p class=title><a name=a54>10.5.4 特殊注释(Special Comments)</p>
<p>在注释中使用XXX来标识某些未实现(bogus)的但可以工作(works)的内容。用FIXME来标识某些假的和错误的内容。</p>
<p class=title><a name=b>11 代码范例(Code Examples)</p>
<p class=title><a name=b1>11.1 Java源文件范例(Java Source File Example)</p>
<p>下面的例子，展示了如何合理布局一个包含单一公共类的Java源程序。接口的布局与其相似。更多信息参见"<a href="http://morningspace.51.net/resource/javacodeconv.html#313"><u><font color=#800080>类和接口声明</font></u></a>"以及"<a href="http://morningspace.51.net/resource/javacodeconv.html#52"><u><font color=#800080>文挡注释</font></u></a>"。</p>
<p>
<pre>/*
* @(#)Blah.java        1.82 99/03/18
*
* Copyright (c) 1994-1999 Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, California, 94303, U.S.A.
* All rights reserved.
*
* This software is the confidential and proprietary information of Sun
* Microsystems, Inc. ("Confidential Information").  You shall not
* disclose such Confidential Information and shall use it only in
* accordance with the terms of the license agreement you entered into
* with Sun.
*/
package java.blah;
import java.blah.blahdy.BlahBlah;
/**
* Class description goes here.
*
* @version 	1.82 18 Mar 1999
* @author 	Firstname Lastname
*/
public class Blah extends SomeClass {
/* A class implementation comment can go here. */
/** classVar1 documentation comment */
public static int classVar1;
/**
* classVar2 documentation comment that happens to be
* more than one line long
*/
private static Object classVar2;
/** instanceVar1 documentation comment */
public Object instanceVar1;
/** instanceVar2 documentation comment */
protected int instanceVar2;
/** instanceVar3 documentation comment */
private Object[] instanceVar3;
/**
* ...constructor Blah documentation comment...
*/
public Blah() {
// ...implementation goes here...
}
/**
* ...method doSomething documentation comment...
*/
public void doSomething() {
// ...implementation goes here...
}
/**
* ...method doSomethingElse documentation comment...
* @param someParam description
*/
public void doSomethingElse(Object someParam) {
// ...implementation goes here...
}
}
</pre>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/110878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">aaabbb</a> 2007-04-16 09:04 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/04/16/110878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自动设置环境变量 </title><link>http://www.blogjava.net/Sprite-bei/archive/2007/04/14/110595.html</link><dc:creator>aaabbb</dc:creator><author>aaabbb</author><pubDate>Sat, 14 Apr 2007 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/04/14/110595.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/110595.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/04/14/110595.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/110595.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/110595.html</trackback:ping><description><![CDATA[<span>把代码拷贝，另存为javaEnv.bat。安装完Java 2 SDK之后，开一个命令行窗口,输入javaEnv java2SDKDir(java2SDKDir是你的java的安装目录，不带路径最后的\。如果安装路径中有空格，请用javaEnv "java2SDKDir"格式)并运行。(注：一定要在javaEnv后边加上你的sdk的目录)</span> <br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">@echo&nbsp;你提供的jdk安装目录为：</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>@echo&nbsp;off<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>IF&nbsp;EXIST&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">\bin\java.exe&nbsp;(<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;rem&nbsp;如输入正确的&nbsp;Java2SDK&nbsp;安装目录，开始设置环境变量<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;@setx&nbsp;JAVA_HOME&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;@setx&nbsp;path&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">JAVA_HOME</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">\bin;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">path</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;@setx&nbsp;classpath&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">classpath</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">;.<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;@setx&nbsp;classpath&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">classpath</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">JAVA_HOME</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">\lib\tools.jar<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;@setx&nbsp;classpath&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">classpath</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">JAVA_HOME</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">\lib\dt.jar<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;@setx&nbsp;classpath&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">classpath</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">JAVA_HOME</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">\jre\lib\rt.jar<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;@echo&nbsp;on<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;@echo&nbsp;Java&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;SDK&nbsp;环境参数设置完毕，正常退出。<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>)&nbsp;&nbsp;ELSE&nbsp;(<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IF&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">&nbsp;(<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rem&nbsp;如没有提供安装目录，提示之后退出<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@echo&nbsp;on<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@echo&nbsp;没有提供&nbsp;Java2SDK&nbsp;的安装目录,不做任何设置，现在退出环境变量设置。<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;ELSE&nbsp;(<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rem&nbsp;如果提供非空的安装目录但没有bin\java.exe，则指定的目录为错误的目录<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@echo&nbsp;on<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@echo&nbsp;非法的&nbsp;Java2SDK&nbsp;的安装目录,不做任何设置，现在退出环境变量设置。<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top>)<br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span></div>
如果找不到setx的 可以从此处<a href="http://www.blogjava.net/Files/Sprite-bei/setx.rar"><span style="COLOR: #ff0000">下载<br></span></a>将这个文件解压缩后的exe文件和bat放在同一个文件夹下即可<br>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/110595.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">aaabbb</a> 2007-04-14 10:08 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/04/14/110595.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>原来是个菜鸟</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/04/12/110113.html</link><dc:creator>aaabbb</dc:creator><author>aaabbb</author><pubDate>Thu, 12 Apr 2007 03:07:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/04/12/110113.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/110113.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/04/12/110113.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/110113.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/110113.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;写了这么就的Swing了，以前老是感觉学的差不多了，已经算很不错了，但是这两天看了别人写的一些东西，越来越感觉到差距了，原来自己还是一个菜鸟。。。要努力了<img height=20 src="http://www.blogjava.net/Emoticons/QQ/17.gif" width=20 border=0>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/110113.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">aaabbb</a> 2007-04-12 11:07 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/04/12/110113.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JComboBox 弹出 宽面板</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/04/11/109890.html</link><dc:creator>aaabbb</dc:creator><author>aaabbb</author><pubDate>Wed, 11 Apr 2007 06:08:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/04/11/109890.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/109890.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/04/11/109890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/109890.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/109890.html</trackback:ping><description><![CDATA[<p>（转）<br>package comboBox;</p>
<p>import java.awt.Dimension;<br>import java.util.Vector;</p>
<p>import javax.swing.ComboBoxModel;<br>import javax.swing.JComboBox;<br>import javax.swing.JFrame;</p>
<p>public class WideComboBox extends JComboBox {</p>
<p>&nbsp;public WideComboBox() {<br>&nbsp;}</p>
<p>&nbsp;public WideComboBox(final Object items[]) {<br>&nbsp;&nbsp;super(items);<br>&nbsp;}</p>
<p>&nbsp;public WideComboBox(Vector items) {<br>&nbsp;&nbsp;super(items);<br>&nbsp;}</p>
<p>&nbsp;public WideComboBox(ComboBoxModel aModel) {<br>&nbsp;&nbsp;super(aModel);<br>&nbsp;}</p>
<p>&nbsp;private boolean layingOut = false;</p>
<p>&nbsp;public void doLayout() {<br>&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;layingOut = true;<br>&nbsp;&nbsp;&nbsp;super.doLayout();<br>&nbsp;&nbsp;} finally {<br>&nbsp;&nbsp;&nbsp;layingOut = false;<br>&nbsp;&nbsp;}<br>&nbsp;}</p>
<p>&nbsp;public Dimension getSize() {<br>&nbsp;&nbsp;Dimension dim = super.getSize();<br>&nbsp;&nbsp;if (!layingOut)<br>&nbsp;&nbsp;&nbsp;dim.width = Math.max(dim.width, getPreferredSize().width);<br>&nbsp;&nbsp;return dim;<br>&nbsp;}</p>
<p>&nbsp;public static void main(String[] args) {<br>&nbsp;&nbsp;JFrame jf = new JFrame();<br>&nbsp;&nbsp;WideComboBox wc = new WideComboBox(new String[] { "11111111111111",<br>&nbsp;&nbsp;&nbsp;&nbsp;"22222222222222", "333" });<br>&nbsp;&nbsp;jf.getContentPane().add(wc);<br>&nbsp;&nbsp;jf.setVisible(true);<br>&nbsp;}<br>}<br></p>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/109890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">aaabbb</a> 2007-04-11 14:08 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/04/11/109890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>杂</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/04/11/109857.html</link><dc:creator>aaabbb</dc:creator><author>aaabbb</author><pubDate>Wed, 11 Apr 2007 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/04/11/109857.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/109857.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/04/11/109857.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/109857.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/109857.html</trackback:ping><description><![CDATA[<p><span style="COLOR: red">1、在程序中调用dos命令，并返回结果：</span><br>String command = "cmd.exe /c ver";<br>Process p = Runtime.getRuntime().exec(command);<br>BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));<br><span style="COLOR: red">2、初始窗口最大化&amp;最小化</span><br>frame.setVisible(true); <br>frame.setExtendedState(JFrame.MAXIMIZED_BOTH); <br>frame.setExtendedState(JFrame.ICONIFIED); <br><span style="COLOR: red">3、监听F11</span><br>static {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Toolkit toolkit = Toolkit.getDefaultToolkit();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; toolkit.addAWTEventListener(new AWTEventListener() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void eventDispatched(AWTEvent e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (((KeyEvent) e).getKeyCode() == KeyEvent.VK_F1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("F1");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (((KeyEvent) e).getKeyCode() == KeyEvent.VK_F2)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("F2");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, AWTEvent.KEY_EVENT_MASK);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread thread = new Thread(new Runnable() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void run() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File music = new File(iSystemConstants.muiscfile);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Player player = new Player(new FileInputStream(music));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; player.play();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (FileNotFoundException ex) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (JavaLayerException ex) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //thread.start();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JOptionPane.showMessageDialog(null, e.getMessage(), "ERROR",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JOptionPane.ERROR_MESSAGE);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }</p>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/109857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">aaabbb</a> 2007-04-11 11:53 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/04/11/109857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>四舍五入方法&amp;&amp;Text失去焦点触发事件</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/04/09/109319.html</link><dc:creator>aaabbb</dc:creator><author>aaabbb</author><pubDate>Mon, 09 Apr 2007 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/04/09/109319.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/109319.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/04/09/109319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/109319.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/109319.html</trackback:ping><description><![CDATA[<p>&nbsp;/**<br>&nbsp; * <br>&nbsp; * @param value 要四舍五入的值<br>&nbsp; * @param scale 小数点后要取的位数<br>&nbsp; * @return<br>&nbsp; */<br>&nbsp;public static double round(double value,int scale){<br>&nbsp;BigDecimal bd=new BigDecimal(value);<br>&nbsp;BigDecimal divisor=new BigDecimal(1);<br>&nbsp;BigDecimal returnValue=bd.divide(divisor, scale,BigDecimal.ROUND_HALF_UP );<br>&nbsp;return returnValue.doubleValue();<br>&nbsp;} <br><br><br>txt.addFocusListener(new FocusAdapter() {<br>&nbsp;&nbsp;&nbsp;&nbsp;public void focusLost(FocusEvent e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (e.isTemporary()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;checkFullSize(txt, "人名", 20);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;});<br>public boolean checkFullSize(JTextComponent comp, String desc, int digit) {</p>
<p>&nbsp;&nbsp;if (checkHarf(comp.getText())) {<br>&nbsp;&nbsp;&nbsp;comp.requestFocus();<br>&nbsp;&nbsp;&nbsp;JOptionPane.showMessageDialog(null, "full size");<br>&nbsp;&nbsp;&nbsp;comp.requestFocus();<br>&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;if (comp.getText().length() &gt; digit) {<br>&nbsp;&nbsp;&nbsp;JOptionPane.showMessageDialog(null, "exceed digit");<br>&nbsp;&nbsp;&nbsp;comp.requestFocus();<br>&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;return true;<br>&nbsp;}</p>
<p>&nbsp;/**<br>&nbsp; * 是否为半角<br>&nbsp; * @param 字符串<br>&nbsp; * @return 半角true 全角false<br>&nbsp; */<br>&nbsp;private boolean checkHarf(String item) {</p>
<p>&nbsp;&nbsp;byte[] bytes = item.getBytes();<br>&nbsp;&nbsp;int beams = item.length();<br>&nbsp;&nbsp;if (beams == bytes.length) {<br>&nbsp;&nbsp;&nbsp;return true;<br>&nbsp;&nbsp;} else {<br>&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;}<br>&nbsp;}</p>
<img src ="http://www.blogjava.net/Sprite-bei/aggbug/109319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">aaabbb</a> 2007-04-09 09:22 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/04/09/109319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>APPLET调用本地资源</title><link>http://www.blogjava.net/Sprite-bei/archive/2007/02/07/98481.html</link><dc:creator>aaabbb</dc:creator><author>aaabbb</author><pubDate>Wed, 07 Feb 2007 01:06:00 GMT</pubDate><guid>http://www.blogjava.net/Sprite-bei/archive/2007/02/07/98481.html</guid><wfw:comment>http://www.blogjava.net/Sprite-bei/comments/98481.html</wfw:comment><comments>http://www.blogjava.net/Sprite-bei/archive/2007/02/07/98481.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Sprite-bei/comments/commentRss/98481.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Sprite-bei/services/trackbacks/98481.html</trackback:ping><description><![CDATA[步骤一：（打包class文件）   <br />    <br />  　　在命令行中执行以下的语句：jar   -cvf   MyApplet.jar   class   <br />    <br />  步骤二：（在网页中嵌入Applet）   <br />    <br />  　　这个网页的名字叫做FileReaderApplet.html，下面是嵌入Applet部分的写法：   <br />    <br />  ＜APPLET   <br />  CODEBASE   =   "."   <br />  CODE   =   "jcomponent.FileReaderApplet.class"   <br />  ARCHIVE   ="MyClass.jar"   <br />  NAME   =   "TestApplet"   <br />  WIDTH   =   400   <br />  HEIGHT   =   300   <br />  HSPACE   =   0   <br />  VSPACE   =   0   <br />  ALIGN   =   middle   <br />  ＞   <br />  ＜/APPLET＞     <br />    <br />    <br />  　　完成这个步骤后，这个Applet已经可以显示了。但是还不能读写本地的文件系统。   <br />    <br />  　　步骤三：（生成证书及签名）   <br />    <br />  　　请在命令行环境下执行以下的命令：   <br />    <br />  　　   1、keytool   -genkey   -keystore   pepper.store   -alias   pepper   <br />    <br />  　　这个命令用来产生一个密匙库，执行完毕后应该在c:/admin中产生一个pepper.store的文件，这里的pepper是我自己的名字，你可以对它进行修改。另外在执行命令的时候还有提示你输入密匙库的密码，这里你一定要记住，否则后面要用的时候无法输入。   <br />    <br />  　　2、keytool   -export   -keystore   pepper.store   -alias   pepper   -file   pepper.cert   <br />    <br />  　　这个命令用来产生签名时所要用的证书，同样这里的pepper也可以换成你自己需要的名字。这个命令执行完后在c:/admin中产生一个pepper.cert的文件。   <br />    <br />  　　4、   jarsigner   -keystore   pepper.store   MyApplet.jar   pepper   <br />    <br />  　　这个命令用上面产生的证书将我们的jar文件进行了签名。   <br />    <br />  　　步骤四：（修改文件）   <br />    <br />  　　1、   在c:/admin中产生一个名为applet.policy的文件，其内容如下：   <br />    <br />  keystore   "file:c:   /admin/pepper.store",   "JKS";   <br />    <br />  grant   signedBy   "pepper"   <br />  {   permission   java.io.FilePermission   "＜＜ALL   FILES＞＞",   "read";   <br />  };   <br />      <br />    <br />  　　这个文件让由pepper签名的Applet拥有本地所有文件的读权限。   <br />    <br />  　　2、   修改${java.home}/jre/lib/security目录下的java.security，找到下面这两行：   <br />    <br />  policy.url.1=file:${java.home}/lib/security/java.policy   <br />  policy.url.2=file:${user.home}/.java.policy     <br />    <br />  　　在下面添写第三行   <br />    <br />  policy.url.3=file:c:   /admin/applet.policy     <br />    <br />  　　完成这个修改后我们在前面创建的applet.policy文件才有效。   <br />    <br />  　　步骤五：（转换html文件）   <br />    <br />  　　运行前面提到的HTMLConvert工具，将原有的FileReaderApplet.html转化成下面的形式：   <br />    <br />  ＜!--"CONVERTED_APPLET"--＞   <br />  ＜!--   CONVERTER   VERSION   1.3   --＞   <br />  ＜OBJECT   classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"   <br />  WIDTH   =   400   HEIGHT   =   300   NAME   =   "TestApplet"   ALIGN   =   middle   VSPACE   =   0   HSPACE   =   0   codebase="<a href="http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0">http://java.sun.com/products/plugin/1.3/jinstall-13-win32.cab#Version=1,3,0,0</a>"＞   <br />  ＜PARAM   NAME   =   CODE   VALUE   =   "jcomponent.FileReaderApplet.class"   ＞   <br />  ＜PARAM   NAME   =   CODEBASE   VALUE   =   "."   ＞   <br />  ＜PARAM   NAME   =   ARCHIVE   VALUE   =   "MyApplet.jar"   ＞   <br />  ＜PARAM   NAME   =   NAME   VALUE   =   "TestApplet"   ＞   <br />    <br />  ＜PARAM   NAME="type"   VALUE="application/x-java-applet;version=1.3"＞   <br />  ＜PARAM   NAME="scriptable"   VALUE="false"＞   <br />  ＜COMMENT＞   <br />  ＜EMBED   type="application/x-java-applet;version=1.3"   CODE   =   "jcomponent.FileReaderApplet.class"   CODEBASE   =   "."   ARCHIVE   =   "MyApplet.jar"   NAME   =   "TestApplet"   WIDTH   =   400   HEIGHT   =   300   ALIGN   =   middle   VSPACE   =   0   HSPACE   =   0   scriptable=false   pluginspage="<a href="http://java.sun.com/products/plugin/1.3/plugin-install.html">http://java.sun.com/products/plugin/1.3/plugin-install.html</a>"＞＜NOEMBED＞＜/COMMENT＞   <br />    <br />  ＜/NOEMBED＞＜/EMBED＞   <br />  ＜/OBJECT＞   <br />    <br />  ＜!--   <br />  ＜APPLET   CODE   =   "jcomponent.FileReaderApplet.class"   CODEBASE   =   "."   ARCHIVE   =   "MyApplet.jar"   WIDTH   =   400   HEIGHT   =   300   NAME   =   "TestApplet"   ALIGN   =   middle   VSPACE   =   0   HSPACE   =   0＞   <br />    <br />    <br />  ＜/APPLET＞   <br />  --＞   <br />  ＜!--"END_CONVERTED_APPLET"--＞     <br />    <br />    <br />  大家不要看到这里的写法很复杂，但是这些都是由HTMLConvert工具自动实现的。这个工具有命令行和图形界面两种运行方式。   <br />    <br />  　　好了，现在这个Applet可以运行读写文件的功能了。如果你要考虑在Internet上实现这个Applet，那么你也不需要在所有的客户端均做上面的步骤，你只需要在你的服务器上创建一个目录，例如c:/admin，将这个目录映射为<a href="http://www.testApplet.com/admin">www.testApplet.com/admin</a>。这里的<a href="http://www.testApplet.com">www.testApplet.com</a>是一个假定的网址，将pepper.cert、pepper.store、FileReaderApplet.html、MyApplet.jar以及applet.policy放在这个目录中，然后修改applet.policy文件如下：   <br />    <br />  keystore   "http://   <a href="http://www.testApplet.com/admin/pepper.store">www.testApplet.com/admin/pepper.store</a>",   "JKS";   <br />    <br />  grant   signedBy   "pepper"   <br />  {   permission   java.io.FilePermission   "＜＜ALL   FILES＞＞",   "read";   <br />  };     <br />    <br />  　　3、   而每个客户端仅仅需要修改一下它们的${java.home}/jre/lib/security目录下的java.security文件如下：   <br />    <br />  policy.url.1=file:${java.home}/lib/security/java.policy   <br />  policy.url.2=file:${user.home}/.java.policy   <br />  policy.url.3=   http://   <a href="http://www.testApplet.com/admin/applet.policy">www.testApplet.com/admin/applet.policy</a>     <br />    <br />  　　当然每个客户端还是需要安装JRE的,而且一定要安装与软件相符合JRE版本<br /><img src ="http://www.blogjava.net/Sprite-bei/aggbug/98481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Sprite-bei/" target="_blank">aaabbb</a> 2007-02-07 09:06 <a href="http://www.blogjava.net/Sprite-bei/archive/2007/02/07/98481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>