??xml version="1.0" encoding="utf-8" standalone="yes"?>久久亚洲精品AB无码播放,国产精品亚洲天堂,亚洲另类古典武侠http://m.tkk7.com/Sprite-bei/<font size="3"><br><font color="#ff6600">天行? 君子以自Z?lt;/font><br><br></font>zh-cnSun, 11 May 2025 04:53:57 GMTSun, 11 May 2025 04:53:57 GMT60本Blog已{至http://m.tkk7.com/zhthttp://m.tkk7.com/Sprite-bei/archive/2007/07/09/129082.htmlaaabbbaaabbbMon, 09 Jul 2007 08:42:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/07/09/129082.htmlhttp://m.tkk7.com/Sprite-bei/comments/129082.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/07/09/129082.html#Feedback0http://m.tkk7.com/Sprite-bei/comments/commentRss/129082.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/129082.htmlhttp://m.tkk7.com/zht

aaabbb 2007-07-09 16:42 发表评论
]]>
Swing 多线E事件处理进度条和Observer的一个具体应?/title><link>http://m.tkk7.com/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://m.tkk7.com/Sprite-bei/archive/2007/04/17/111221.html</guid><wfw:comment>http://m.tkk7.com/Sprite-bei/comments/111221.html</wfw:comment><comments>http://m.tkk7.com/Sprite-bei/archive/2007/04/17/111221.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Sprite-bei/comments/commentRss/111221.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Sprite-bei/services/trackbacks/111221.html</trackback:ping><description><![CDATA[     摘要:       Swing的事件处理中Q对于非常费时的处理如果不用多线E会(x)造成ȝ面的dQ即界面一片白Ԍq样非常不好的,也是不提倡的Q而v用多U程q行事g处理又面临一个问题即如果通知用户事g处理的进度,是否处理完成Q所以最好在处理的过E中l用户一提示Q标明处理的q度信息。这U提C可以用q度条的信息来表C出来,以下是一个用q度条来标示事g...  <a href='http://m.tkk7.com/Sprite-bei/archive/2007/04/17/111221.html'>阅读全文</a><img src ="http://m.tkk7.com/Sprite-bei/aggbug/111221.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Sprite-bei/" target="_blank">aaabbb</a> 2007-04-17 11:44 <a href="http://m.tkk7.com/Sprite-bei/archive/2007/04/17/111221.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计模式之Observerhttp://m.tkk7.com/Sprite-bei/archive/2007/04/16/110976.htmlaaabbbaaabbbMon, 16 Apr 2007 07:34:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/04/16/110976.htmlhttp://m.tkk7.com/Sprite-bei/comments/110976.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/04/16/110976.html#Feedback5http://m.tkk7.com/Sprite-bei/comments/commentRss/110976.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/110976.htmlJava深入C定程?׃可避免的到设计模式(design pattern)q一概念,?jin)解设计模?自己对java中的接口或抽象类应用有更q理解.设计模式在java的中型系l中应用q泛,遵@一定的~程模式,才能使自q代码便于理解,易于交流,Observer(观察?模式是比较常用的一个模?其在界面设计中应用q泛,而本站所x的是Java在电(sh)子商务系l中应用,因此想从?sh)子商务实例中分析Observer的应?

虽然|上商店形式多样,每个站点有自q特色,但也有其一般的共?单就"商品的变?以便?qing)时通知订户"q一?是很多网上商店共有的模式,q一模式cMObserver patern.

具体的说,如果|上商店中商品在名称 h{方面有变化,如果pȝ能自动通知?x)?是|上商店区别传统商店的一大特?q就需要在商品product中加入Observerq样角色,以便productl节发生变化?Observer能自动观察到q种变化,q能q行?qing)时的update或notify动作.

Java的APIqؓ(f)为我们提供现成的Observer接口Java.util.Observer.我们只要直接使用它就可以.

我们必须extends Java.util.Observer才能真正使用?
1.提供Add/Delete observer的方?
2.提供通知(notisfy) 所有observer的方?

import java.util.Observable;

public class product extends Observable {

 private String name;

 private float price;
 public product(){
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
  //讄变化?
  setChanged();
  notifyObservers(name);

 }

 public float getPrice() {
  return price;
 }

 public void setPrice(float price) {
  this.price = price;
  //讄变化?br>  setChanged();
  notifyObservers(new Float(price));

 }

 //以下可以是数据库更新 插入命o(h).
 public void saveToDb() {
  //  .....................

 }

 public static void main(String[] args) {
  product p=new product();
  p.addObserver(new NameObserver());
  p.addObserver(new PriceObserver());
  p.setPrice(100);
  p.setName("name");
 }
}


我们注意?在productcM 的setXXXҎ(gu)?我们讄?notify(通知)Ҏ(gu), 当调用setXXX,实际上就触发?jin)notisfyObserversҎ(gu),q将通知相应观察者应该采取行动了(jin).

下面看看q些观察者的代码,他们I竟采取?jin)什么行?

//观察者NameObserver主要用来对品名U?name)q行观察?br>public class NameObserver implements Observer{

  private String name=null;

  public void update(Observable obj,Object arg){

    if (arg instanceof String){

     name=(String)arg;
     //产品名称改变值在name?br>     System.out.println("NameObserver :name changet to "+name);

    }

  }

}

//观察者PriceObserver主要用来对品h(hun)?price)q行观察?br>public class PriceObserver implements Observer{

  private float price=0;

  public void update(Observable obj,Object arg){

    if (arg instanceof Float){

     price=((Float)arg).floatValue();
  
     System.out.println("PriceObserver :price changet to "+price);

    }

  }

}

输出l果如下Q?br>PriceObserver :price changet to 100.0
NameObserver :name changet to name


aaabbb 2007-04-16 15:34 发表评论
]]>
Java语言~码规范(Java Code Conventions)http://m.tkk7.com/Sprite-bei/archive/2007/04/16/110878.htmlaaabbbaaabbbMon, 16 Apr 2007 01:04:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/04/16/110878.htmlhttp://m.tkk7.com/Sprite-bei/comments/110878.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/04/16/110878.html#Feedback4http://m.tkk7.com/Sprite-bei/comments/commentRss/110878.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/110878.html1 介绍(Introduction)

1.1 Z么要有编码规?Why Have Code Conventions)

~码规范对于E序员而言ؓ(f)重要Q有以下几个原因Q?/p>

- 一个Y件的生命周期中,80%的花费在于维?br>- 几乎没有M一个YӞ在其整个生命周期中,均由最初的开发h员来l护
- ~码规范可以改善软g的可L,可以让程序员快而彻底地理解新的代码
- 如果你将源码作ؓ(f)产品发布Q就需要确d是否被很好的打包q且清晰无误Q一如你已构建的其它M产品

Z(jin)执行规范Q每个Y件开发h员必M致遵守编码规范。每个h?/p>

1.2 版权声明(Acknowledgments)

本文档反映的是Sun MicroSystems公司QJava语言规范中的~码标准部分。主要A(ch)献者包括:(x)Peter KingQPatrick NaughtonQMike DeMoneyQJonni KanervaQKathy Walrath以及(qing)Scott Hommel?/p>

本文档现由Scott Hommell护Q有兌论意见请发至shommel@eng.sun.com

2 文g?File Names)

q部分列Z(jin)常用的文件名?qing)其后缀?/p>

2.1 文g后缀(File Suffixes)

JavaE序使用下列文g后缀Q?/p>

文gcd 文g后缀
Java源文?/td> .java
Java字节码文?/td> .class

2.2 常用文g?Common File Names)

常用的文件名包括Q?/p>

文g?/td> 用?/td>
GNUmakefile makefiles的首选文件名。我们采用gnumake来创建(buildQY件?/td>
README 概述特定目录下所含内容的文g的首选文件名

3 文gl织(File Organization)

一个文件由被空行分割而成的段落以?qing)标识每个段落的可选注释共同组成。超q?000行的E序难以阅读Q应该尽量避免?Java源文件范?提供?jin)一个布局合理的JavaE序范例?/p>

3.1 Java源文?Java Source Files)

每个Java源文仉包含一个单一的公q或接口。若U有cd接口与一个公q相关联,可以它们和公共cL入同一个源文g。公q必须是这个文件中的第一个类或接口?/p>

Java源文件还遵@以下规则Q?/p>

- 开头注释(参见"开头注?/font>"Q?br>- 包和引入语句Q参?包和引入语句"Q?br>- cd接口声明Q参?cd接口声明"Q?

3.1.1 开头注?Beginning Comments)

所有的源文仉应该在开头有一个C语言风格的注释,其中列出cd、版本信息、日期和版权声明Q?/p>

  /*
* Classname
*
* Version information
*
* Date
*
* Copyright notice
*/

 

3.1.2 包和引入语句(Package and Import Statements)

在多数Java源文件中Q第一个非注释行是包语句。在它之后可以跟引入语句。例如:(x)

  package java.awt;
import java.awt.peer.CanvasPeer;

 

3.1.3 cd接口声明(Class and Interface Declarations)

下表描述?jin)类和接口声明的各个部分以?qing)它们出现的先后次序。参?Java源文件范?/font>"中一个包含注释的例子?/p>

  c?接口声明的各部分 注解
1 c?接口文档注释(/**……*/) 该注释中所需包含的信息,参见"文档注释"
2 cL接口的声?/td>  
3 c?接口实现的注?/*……*/)如果有必要的?/td> 该注释应包含M有关整个cL接口的信息,而这些信息又不适合作ؓ(f)c?接口文档注释?/td>
4 cȝ(?rn)?变量 首先是类的公共变量,随后是保护变量,再后是包一U别的变?没有讉K修饰W,access modifier)Q最后是U有变量?/td>
5 实例变量 首先是公q别的Q随后是保护U别的,再后是包一U别?没有讉K修饰W?Q最后是U有U别的?/td>
6 构造器  
7 Ҏ(gu) q些Ҏ(gu)应该按功能,而非作用域或讉K权限Q分l。例如,一个私有的cL法可以置于两个公有的实例Ҏ(gu)之间。其目的是ؓ(f)?jin)更便于阅读和理解代码?/td>

4 ~进排版(Indentation)

4个空格常被作为羃q排版的一个单位。羃q的切解释q未详细指定(I格 vs. 制表W?。一个制表符{于8个空?而非4??/p>

4.1 行长?Line Length)

量避免一行的长度过80个字W,因ؓ(f)很多l端和工具不能很好处理之?/p>

注意Q用于文档中的例子应该用更短的行长Q长度一般不过70个字W?/p>

4.2 换行(Wrapping Lines)

当一个表辑ּ无法容纳在一行内Ӟ可以依据如下一般规则断开之:(x)

- 在一个逗号后面断开
- 在一个操作符前面断开
- 宁可选择较高U别(higher-level)的断开Q而非较低U别(lower-level)的断开
- 新的一行应该与上一行同一U别表达式的开头处寚w
- 如果以上规则D你的代码混ؕ或者你的代码都堆挤在双Q那׃之以~进8个空根{?

以下是断开Ҏ(gu)调用的一些例子:(x)

  someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
var = someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));

 

以下是两个断开术表达式的例子。前者更好,因ؓ(f)断开处位于括可辑ּ的外边,q是个较高别的断开?/p>

  longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longname6; //PREFFER
longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longname6; //AVOID

 

以下是两个羃q方法声明的例子。前者是常规情Ş。后者若使用常规的羃q方式将?x)ɽW二行和W三行移得很靠右Q所以代之以~进8个空?/p>

  //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) {
...
}

 

if语句的换行通常使用8个空格的规则Q因为常规羃q?4个空??x)语句体看h比较费劲。比如:(x)

  //DON’T USE THIS INDENTATION
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) { //BAD WRAPS
doSomethingAboutIt();             //MAKE THIS LINE EASY TO MISS
}
//USE THIS INDENTATION INSTEAD
if ((condition1 && condition2)
|| (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}
//OR USE THIS
if ((condition1 && condition2) || (condition3 && condition4)
||!(condition5 && condition6)) {
doSomethingAboutIt();
}

 

q里有三U可行的Ҏ(gu)用于处理三元q算表达式:(x)

  alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression) ? beta
: gamma;
alpha = (aLongBooleanExpression)
? beta
: gamma;

 

5 注释(Comments)

JavaE序有两cL释:(x)实现注释(implementation comments)和文档注?document comments)。实现注释是那些在C++中见q的Q?*...*/?/界定的注释。文档注?被称?doc comments")是Java独有的,q由/**...*/界定。文档注释可以通过javadoc工具转换成HTML文g?/p>

实现注释用以注释代码或者实现细节。文档注释从实现自由(implementation-free)的角度描qC码的规范。它可以被那些手头没有源码的开发h员读懂?/p>

注释应被用来l出代码的LQƈ提供代码自n没有提供的附加信息。注释应该仅包含与阅d理解E序有关的信息。例如,相应的包如何被徏立或位于哪个目录下之cȝ信息不应包括在注释中?/p>

在注释里Q对设计决策中重要的或者不是显而易见的地方q行说明是可以的Q但应避免提供代码中己清晰表辑և来的重复信息。多余的的注释很Ҏ(gu)q时。通常应避免那些代码更新就可能q时的注释?/p>

注意Q频J的注释有时反映Z码的低质量。当你觉得被q要加注释的时候,考虑一下重写代码其更清晰?/p>

注释不应写在用星h其他字符d来的大框里。注释不应包括诸如制表符和回退W之cȝҎ(gu)字符?/p>

5.1 实现注释的格?Implementation Comment Formats)

E序可以?U实现注释的风格Q块(block)、单?single-line)、尾?trailing)和行?end-of-line)?/p>

5.1.1 块注?Block Comments)

块注释通常用于提供Ҏ(gu)ӞҎ(gu)Q数据结构和法的描q。块注释被置于每个文件的开始处以及(qing)每个Ҏ(gu)之前。它们也可以被用于其他地方,比如Ҏ(gu)内部。在功能和方法内部的块注释应该和它们所描述的代码具有一L(fng)~进格式?/p>

块注释之首应该有一个空行,用于把块注释和代码分割开来,比如Q?/p>

  /*
* Here is a block comment.
*/

 

块注释可以以/*-开_(d)q样indent(1)可以将之识别ؓ(f)一个代码块的开始,而不?x)重排它?/p>

  /*-
* Here is a block comment with some very special
* formatting that I want indent(1) to ignore.
*
*    one
*        two
*            three
*/

 

注意Q如果你不用indent(1)Q就不必在代码中使用/*-Q或Z人可能对你的代码q行indent(1)作让步?/p>

参见"文档注释"

5.1.2 单行注释(Single-Line Comments)

短注释可以显C在一行内Qƈ与其后的代码h一L(fng)~进层。如果一个注释不能在一行内写完Q就该采用块注释(参见"块注?/font>")。单行注释之前应该有一个空行。以下是一个Java代码中单行注释的例子Q?/p>

  if (condition) {
/* Handle the condition. */
...
}

 

5.1.3 注释(Trailing Comments)

极短的注释可以与它们所要描q的代码位于同一行,但是应该有够的I白来分开代码和注释。若有多个短注释出现于大D代码中Q它们应该具有相同的~进?/p>

以下是一个Java代码中尾端注释的例子Q?/p>

  if (a == 2) {
return TRUE;              /* special case */
} else {
return isPrime(a);         /* works only for odd a */
}

 

5.1.4 行末注释(End-Of-Line Comments)

注释界定W?//"Q可以注释掉整行或者一行中的一部分。它一般不用于q箋多行的注释文本;然而,它可以用来注释掉q箋多行的代码段。以下是所有三U风格的例子Q?/p>

  if (foo > 1) {
// Do a double-flip.
...
}
else {
return false;          // Explain why here.
}
//if (bar > 1) {
//
//    // Do a triple-flip.
//    ...
//}
//else {
//    return false;
//}

 

5.2 文档注释(Documentation Comments)

注意Q此处描q的注释格式之范例,参见"Java源文件范?/font>"

若想?jin)解更多Q参?How to Write Doc Comments for Javadoc"Q其中包含了(jin)有关文档注释标记的信?@return, @param, @see)Q?/p>

http://java.sun.com/javadoc/writingdoccomments/index.html

若想?jin)解更多有关文档注释和javadoc的详l资料,参见javadoc的主:(x)

http://java.sun.com/javadoc/index.html

文档注释描述Java的类、接口、构造器Q方法,以及(qing)字段(field)。每个文档注释都?x)被|于注释定界W?**...*/之中Q一个注释对应一个类、接口或成员。该注释应位于声明之前:(x)

  /**
* The Example class provides ...
*/
public class Example { ...

 

注意层(top-level)的类和接口是不羃q的Q而其成员是羃q的。描q类和接口的文档注释的第一?/**)不需~进Q随后的文档注释每行都羃q??使星L(fng)向对?。成员,包括构造函数在内,其文档注释的W一行羃q?|随后每行都羃q?根{?/p>

若你想给出有关类、接口、变量或Ҏ(gu)的信息,而这些信息又不适合写在文档中,则可使用实现块注??.1.1)或紧跟在声明后面的单行注??.1.2)。例如,有关一个类实现的细节,应放入紧跟在cd明后面的实现块注释中Q而不是放在文档注释中?/p>

文档注释不能攑֜一个方法或构造器的定义块中,因ؓ(f)Java?x)将位于文档注释之后的第一个声明与其相兌?/p>

6 声明(Declarations)

6.1 每行声明变量的数?Number Per Line)

推荐一行一个声明,因ؓ(f)q样以利于写注释。亦卻I

  int level;  // indentation level
int size;   // size of table

 

要优于,

int level, size;

不要不同类型变量的声明攑֜同一行,例如Q?/p>

  int foo,  fooarray[];   //WRONG!

 

注意Q上面的例子中,在类型和标识W之间放?jin)一个空|另一U被允许的替代方式是使用制表W:(x)

  int		level;         // indentation level
int		size;          // size of table
Object	currentEntry;  // currently selected table entry

 

6.2 初始?Initialization)

量在声明局部变量的同时初始化。唯一不这么做的理由是变量的初始g赖于某些先前发生的计?/p>

6.3 布局(Placement)

只在代码块的开始处声明变量。(一个块是指M被包含在大括?{"?}"中间的代码。)(j)不要在首ơ用到该变量时才声明之。这?x)把注意力不集中的程序员搞糊涂,同时会(x)妨代码在该作用域内的可移植性?/p>

  void myMethod() {
int int1 = 0;         // beginning of method block
if (condition) {
int int2 = 0;     // beginning of "if" block
...
}
}

 

该规则的一个例外是for循环的烦(ch)引变?/p>

  for (int i = 0; i < maxLoops; i++) { ... }

 

避免声明的局部变量覆盖上一U声明的变量。例如,不要在内部代码块中声明相同的变量名:(x)

  int count;
...
myMethod() {
if (condition) {
int count = 0;     // AVOID!
...
}
...
}

 

6.4 cd接口的声?Class and Interface Declarations)

当编写类和接口是Q应该遵守以下格式规则:(x)

- 在方法名与其参数列表之前的左括号"("间不要有I格
- 左大括号"{"位于声明语句同行的末?br>- 叛_括号"}"另v一行,与相应的声明语句寚wQ除非是一个空语句Q?}"应紧跟在"{"之后

  class Sample extends Object {
int ivar1;
int ivar2;
Sample(int i, int j) {
ivar1 = i;
ivar2 = j;
}
int emptyMethod() {}
...
}
- Ҏ(gu)与方法之间以I分隔

 

7 语句(Statements)

7.1 单语?Simple Statements)

每行臛_包含一条语句,例如Q?/p>

  argv++;       // Correct
argc--;       // Correct
argv++; argc--;       // AVOID!

 

7.2 复合语句(Compound Statements)

复合语句是包含在大括号中的语句序列,形如"{ 语句 }"。例如下面各Dc(din)?/p>

- 被括其中的语句应该较之复合语句羃q一个层?br>- 左大括号"{"应位于复合语句v始行的行;叛_括号"}"应另起一行ƈ与复合语句首行对齐?br>- 大括号可以被用于所有语句,包括单个语句Q只要这些语句是诸如if-else或for控制l构的一部分。这样便于添加语句而无需担心(j)׃忘了(jin)加括可(g)引入bug?

7.3 q回语句(return Statements)

一个带q回值的return语句不用小括号"()"Q除非它们以某种方式使返回值更为显见。例如:(x)

  return;
return myDisk.size();
return (size ? size : defaultSize);

 

7.4 ifQif-elseQif else-if else语句(if, if-else, if else-if else Statements)

if-else语句应该h如下格式Q?/p>

  if (condition) {
statements;
}
if (condition) {
statements;
} else {
statements;
}
if (condition) {
statements;
} else if (condition) {
statements;
} else{
statements;
}

 

注意Qif语句L?{"?}"括v来,避免使用如下Ҏ(gu)引v错误的格式:(x)

  if (condition) //AVOID! THIS OMITS THE BRACES {}!
statement;

 

7.5 for语句(for Statements)

一个for语句应该h如下格式Q?/p>

  for (initialization; condition; update) {
statements;
}

 

一个空的for语句(所有工作都在初始化Q条件判断,更新子句中完成)(j)应该h如下格式Q?/p>

  for (initialization; condition; update);

 

当在for语句的初始化或更新子句中使用逗号Ӟ避免因用三个以上变量,而导致复杂度提高。若需要,可以在for循环之前(为初始化子句)或for循环末尾(为更新子?使用单独的语句?/p>

7.6 while语句(while Statements)

一个while语句应该h如下格式

  while (condition) {
statements;
}

 

一个空的while语句应该h如下格式Q?/p>

  while (condition);

 

7.7 do-while语句(do-while Statements)

一个do-while语句应该h如下格式Q?/p>

  do {
statements;
} while (condition);

 

7.8 switch语句(switch Statements)

一个switch语句应该h如下格式Q?/p>

  switch (condition) {
case ABC:
statements;
/* falls through */
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}

 

每当一个case着往下执行时(因ؓ(f)没有break语句)Q通常应在break语句的位|添加注释。上面的CZ代码中就包含注释/* falls through */?/p>

7.9 try-catch语句(try-catch Statements)

一个try-catch语句应该h如下格式Q?/p>

  try {
statements;
} catch (ExceptionClass e) {
statements;
}

 

一个try-catch语句后面也可能跟着一个finally语句Q不论try代码块是否顺利执行完Q它都会(x)被执行?/p>

  try {
statements;
} catch (ExceptionClass e) {
statements;
} finally {
statements;
}

 

8 I白(White Space)

8.1 I(Blank Lines)

I逻辑相关的代码段分隔开Q以提高可读性?/p>

下列情况应该L使用两个IQ?/p>

- 一个源文g的两个片D?section)之间
- cd明和接口声明之间

下列情况应该L使用一个空行:(x)

- 两个Ҏ(gu)之间
- Ҏ(gu)内的局部变量和Ҏ(gu)的第一条语句之?br>- 块注释(参见"
5.1.1"Q或单行注释Q参?5.1.2"Q之?br>- 一个方法内的两个逻辑D之_(d)用以提高可读?

8.2 I格(Blank Spaces)

下列情况应该使用I格Q?/p>

- 一个紧跟着括号的关键字应该被空格分开Q例如:(x)

  while (true) {
...
}
注意Q空g应该|于Ҏ(gu)名与其左括号之间。这有助于区分关键字和Ҏ(gu)调用?br>- I白应该位于参数列表中逗号的后?br>- 所有的二元q算W,除了(jin)"."Q应该用空格将之与操作数分开。一元操作符和操作数之间不因该加I格Q比如:(x)负号("-")、自?"++")和自?"--")。例如:(x)
    a += c + d;
a = (a + b) / (c * d);
while (d++ = s++) {
n++;
}
printSize("size is " + foo + "\n");
- for语句中的表达式应该被I格分开Q例如:(x)
    for (expr1; expr2; expr3)
- 强制转型后应该跟一个空|例如Q?
    myMethod((byte) aNum, (Object) x);
myMethod((int) (cp + 5), ((int) (i + 3)) + 1);

 

9 命名规范(Naming Conventions)

命名规范使程序更易读Q从而更易于理解。它们也可以提供一些有x识符功能的信息,以助于理解代码,例如Q不论它是一个常量,包,q是cR?/p>

标识W类?/td> 命名规则 例子
?Packages) 一个唯一包名的前~L全部写的ASCII字母q且是一个顶U域名,通常是comQeduQgovQmilQnetQorgQ或1981qISO 3166标准所指定的标识国家的英文双字W代码。包名的后箋部分Ҏ(gu)不同机构各自内部的命名规范而不相同。这cd名规范可能以特定目录名的l成来区分部?department)Q项?project)Q机?machine)Q或注册?login names)?/td> com.sun.eng
com.apple.quicktime.v2
edu.cmu.cs.bovik.cheese
c?Classes) 命名规则Q类名是个一名词Q采用大写混合的方式,每个单词的首字母大写。尽量你的cdz而富于描q。用完整单词,避免~写?除非该羃写词被更q泛使用Q像URLQHTML) class Raster;
class ImageSprite;
接口(Interfaces) 命名规则Q大写规则与类名相?/td> interface RasterDelegate;
interface Storing;
Ҏ(gu)(Methods) Ҏ(gu)名是一个动词,采用大小写؜合的方式Q第一个单词的首字母小写,其后单词的首字母大写?/td> run();
runFast();
getBackground();
变量(Variables) 除了(jin)变量名外Q所有实例,包括c,cd量,均采用大写混合的方式,W一个单词的首字母小写,其后单词的首字母大写。变量名不应以下划线或美元符号开_(d)管q在语法上是允许的?br>变量名应短且富于描述。变量名的选用应该易于记忆Q即Q能够指出其用途。尽量避免单个字W的变量名,除非是一ơ性的临时变量。(f)时变量通常被取名ؓ(f)iQjQkQm和nQ它们一般用于整型;cQdQeQ它们一般用于字W型?/td> char c;
int i;
float myWidth;
实例变量(Instance Variables) 大小写规则和变量名相|除了(jin)前面需要一个下划线 int _employeeId;
String _name;
Customer _customer;
帔R(Constants) cd量和ANSI帔R的声明,应该全部大写Q单词间用下划线隔开?量避免ANSI帔RQ容易引起错? static final int MIN_WIDTH = 4;
static final int MAX_WIDTH = 999;
static final int GET_THE_CPU = 1;

10 ~程惯例(Programming Practices)

10.1 提供对实例以?qing)类变量的访问控?Providing Access to Instance and Class Variables)

若没有够理由,不要把实例或cd量声明ؓ(f)公有。通常Q实例变量无需昑ּ的设|?set)和获?gotten)Q通常q作为方法调用的边缘效应 (side effect)而生?/p>

一个具有公有实例变量的恰当例子Q是cM作ؓ(f)数据l构Q没有行为。亦卻I若你要用一个结?struct)而非一个类(如果java支持l构的话)Q那么把cȝ实例变量声明为公有是合适的?/p>

10.2 引用cd量和cL?Referring to Class Variables and Methods)

避免用一个对象访问一个类的静(rn)态变量和Ҏ(gu)。应该用cd替代。例如:(x)

  classMethod();             //OK
AClass.classMethod();      //OK
anObject.classMethod();    //AVOID!

 

10.3 帔R(Constants)

位于for循环中作数器值的数字帔RQ除?1,0?之外Q不应被直接写入代码?/p>

10.4 变量赋?Variable Assignments)

避免在一个语句中l多个变量赋相同的倹{它很难L。例如:(x)

  fooBar.fChar = barFoo.lchar = 'c'; // AVOID!

 

不要赋D符用在Ҏ(gu)与相{关p运符h的地斏V例如:(x)

  if (c++ = d++) {        // AVOID! (Java disallows)
...
}

 

应该写成

  if ((c++ = d++) != 0) {
...
}

 

不要使用内嵌(embedded)赋D符试图提高q行时的效率Q这是编译器的工作。例如:(x)

  d = (a = b + c) + r;        // AVOID!

 

应该写成

  a = b + c;
d = a + r;

 

10.5 其它惯例(Miscellaneous Practices)

10.5.1 圆括?Parentheses)

一般而言Q在含有多种q算W的表达式中使用圆括h避免q算W优先问题Q是个好Ҏ(gu)。即使运符的优先对你而言可能很清楚,但对其他人未必如此。你不能假设别的E序员和你一h楚运符的优先?/p>

  if (a == b && c == d)     // AVOID!
if ((a == b) && (c == d))  // RIGHT

 

10.5.2 q回?Returning Values)

设法让你的程序结构符合目的。例如:(x)

  if (booleanExpression) {
return true;
} else {
return false;
}

 

应该代之以如下方法:(x)

  return booleanExpression;

 

cM圎ͼ(x)

  if (condition) {
return x;
}
return y;

 

应该写做Q?/p>

  return (condition ? x : y);

 

10.5.3 条gq算W??"前的表达?Expressions before '?' in the Conditional Operator)

如果一个包含二元运符的表辑ּ出现在三元运符" ? : "??"之前Q那么应该给表达式添上一对圆括号。例如:(x)

  (x >= 0) ? x : -x;

 

10.5.4 Ҏ(gu)注释(Special Comments)

在注释中使用XXX来标识某些未实现(bogus)的但可以工作(works)的内宏V用FIXME来标识某些假的和错误的内宏V?/p>

11 代码范例(Code Examples)

11.1 Java源文件范?Java Source File Example)

下面的例子,展示?jin)如何合理布局一个包含单一公共cȝJava源程序。接口的布局与其怼。更多信息参?cd接口声明"以及(qing)"文挡注释"?/p>

/*
* @(#)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...
}
}


aaabbb 2007-04-16 09:04 发表评论
]]>
自动讄环境变量 http://m.tkk7.com/Sprite-bei/archive/2007/04/14/110595.htmlaaabbbaaabbbSat, 14 Apr 2007 02:08:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/04/14/110595.htmlhttp://m.tkk7.com/Sprite-bei/comments/110595.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/04/14/110595.html#Feedback5http://m.tkk7.com/Sprite-bei/comments/commentRss/110595.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/110595.html把代码拷贝,另存为javaEnv.bat。安装完Java 2 SDK之后Q开一个命令行H口,输入javaEnv java2SDKDir(java2SDKDir是你的java的安装目录,不带路径最后的\。如果安装\径中有空|L(fng)javaEnv "java2SDKDir"格式)q运行?注:(x)一定要在javaEnv后边加上你的sdk的目?
@echo 你提供的jdk安装目录为:(x)%1
@echo off
IF EXIST 
%1\bin\java.exe (
   rem 如输入正的 Java2SDK 安装目录Q开始设|环境变?br>   @setx JAVA_HOME 
%1
   @setx path 
%JAVA_HOME%\bin;%path%
   @setx classpath 
%classpath%;.
   @setx classpath 
%classpath%;%JAVA_HOME%\lib\tools.jar
   @setx classpath 
%classpath%;%JAVA_HOME%\lib\dt.jar
   @setx classpath 
%classpath%;%JAVA_HOME%\jre\lib\rt.jar
   @echo on
   @echo Java 
2 SDK 环境参数讄完毕Q正帔R出?br>)  ELSE (
      IF 
%1=="" (
      rem 如没有提供安装目录,提示之后退?br>      @echo on
      @echo 没有提供 Java2SDK 的安装目?不做M讄Q现在退出环境变量设|?br>      ) ELSE (
        rem 如果提供非空的安装目录但没有bin\java.exeQ则指定的目录ؓ(f)错误的目?br>        @echo on
        @echo 非法?nbsp;Java2SDK 的安装目?不做M讄Q现在退出环境变量设|?br>      )
)

如果找不到setx?可以从此?a href="http://m.tkk7.com/Files/Sprite-bei/setx.rar">下蝲
这个文件解压羃后的exe文g和bat攑֜同一个文件夹下即?br>

aaabbb 2007-04-14 10:08 发表评论
]]>
原来是个菜鸟http://m.tkk7.com/Sprite-bei/archive/2007/04/12/110113.htmlaaabbbaaabbbThu, 12 Apr 2007 03:07:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/04/12/110113.htmlhttp://m.tkk7.com/Sprite-bei/comments/110113.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/04/12/110113.html#Feedback0http://m.tkk7.com/Sprite-bei/comments/commentRss/110113.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/110113.html

aaabbb 2007-04-12 11:07 发表评论
]]>
JComboBox 弹出 宽面?/title><link>http://m.tkk7.com/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://m.tkk7.com/Sprite-bei/archive/2007/04/11/109890.html</guid><wfw:comment>http://m.tkk7.com/Sprite-bei/comments/109890.html</wfw:comment><comments>http://m.tkk7.com/Sprite-bei/archive/2007/04/11/109890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Sprite-bei/comments/commentRss/109890.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Sprite-bei/services/trackbacks/109890.html</trackback:ping><description><![CDATA[<p>Q{Q?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> public WideComboBox() {<br> }</p> <p> public WideComboBox(final Object items[]) {<br>  super(items);<br> }</p> <p> public WideComboBox(Vector items) {<br>  super(items);<br> }</p> <p> public WideComboBox(ComboBoxModel aModel) {<br>  super(aModel);<br> }</p> <p> private boolean layingOut = false;</p> <p> public void doLayout() {<br>  try {<br>   layingOut = true;<br>   super.doLayout();<br>  } finally {<br>   layingOut = false;<br>  }<br> }</p> <p> public Dimension getSize() {<br>  Dimension dim = super.getSize();<br>  if (!layingOut)<br>   dim.width = Math.max(dim.width, getPreferredSize().width);<br>  return dim;<br> }</p> <p> public static void main(String[] args) {<br>  JFrame jf = new JFrame();<br>  WideComboBox wc = new WideComboBox(new String[] { "11111111111111",<br>    "22222222222222", "333" });<br>  jf.getContentPane().add(wc);<br>  jf.setVisible(true);<br> }<br>}<br></p> <img src ="http://m.tkk7.com/Sprite-bei/aggbug/109890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Sprite-bei/" target="_blank">aaabbb</a> 2007-04-11 14:08 <a href="http://m.tkk7.com/Sprite-bei/archive/2007/04/11/109890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>?/title><link>http://m.tkk7.com/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://m.tkk7.com/Sprite-bei/archive/2007/04/11/109857.html</guid><wfw:comment>http://m.tkk7.com/Sprite-bei/comments/109857.html</wfw:comment><comments>http://m.tkk7.com/Sprite-bei/archive/2007/04/11/109857.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/Sprite-bei/comments/commentRss/109857.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/Sprite-bei/services/trackbacks/109857.html</trackback:ping><description><![CDATA[<p><span style="COLOR: red">1、在E序中调用dos命o(h)Qƈq回l果Q?/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、初始窗口最大化&最化</span><br>frame.setVisible(true); <br>frame.setExtendedState(JFrame.MAXIMIZED_BOTH); <br>frame.setExtendedState(JFrame.ICONIFIED); <br><span style="COLOR: red">3、监听F(xin)11</span><br>static {<br>        try {<br>            Toolkit toolkit = Toolkit.getDefaultToolkit();<br>            toolkit.addAWTEventListener(new AWTEventListener() {<br>                public void eventDispatched(AWTEvent e) {<br>                    if (((KeyEvent) e).getKeyCode() == KeyEvent.VK_F1)<br>                        System.out.println("F1");<br>                    if (((KeyEvent) e).getKeyCode() == KeyEvent.VK_F2)<br>                        System.out.println("F2");<br>                }<br>            }, AWTEvent.KEY_EVENT_MASK);<br>            Thread thread = new Thread(new Runnable() {<br>                public void run() {<br>                    try {<br>                        File music = new File(iSystemConstants.muiscfile);<br>                        Player player = new Player(new FileInputStream(music));<br>                        player.play();<br>                    } catch (FileNotFoundException ex) {<br>                    } catch (JavaLayerException ex) {<br>                    }</p> <p>                }<br>            });<br>            //thread.start();</p> <p>            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());<br>        } catch (Exception e) {<br>            JOptionPane.showMessageDialog(null, e.getMessage(), "ERROR",<br>                                          JOptionPane.ERROR_MESSAGE);<br>        }<br>    }</p> <img src ="http://m.tkk7.com/Sprite-bei/aggbug/109857.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/Sprite-bei/" target="_blank">aaabbb</a> 2007-04-11 11:53 <a href="http://m.tkk7.com/Sprite-bei/archive/2007/04/11/109857.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>四舍五入Ҏ(gu)&&Text失去焦点触发事ghttp://m.tkk7.com/Sprite-bei/archive/2007/04/09/109319.htmlaaabbbaaabbbMon, 09 Apr 2007 01:22:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/04/09/109319.htmlhttp://m.tkk7.com/Sprite-bei/comments/109319.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/04/09/109319.html#Feedback0http://m.tkk7.com/Sprite-bei/comments/commentRss/109319.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/109319.html /**
  *
  * @param value 要四舍五入的?br>  * @param scale 数点后要取的位?br>  * @return
  */
 public static double round(double value,int scale){
 BigDecimal bd=new BigDecimal(value);
 BigDecimal divisor=new BigDecimal(1);
 BigDecimal returnValue=bd.divide(divisor, scale,BigDecimal.ROUND_HALF_UP );
 return returnValue.doubleValue();
 }


txt.addFocusListener(new FocusAdapter() {
    public void focusLost(FocusEvent e) {
     if (e.isTemporary()) {
      return;
     }
     checkFullSize(txt, "人名", 20);
    }
   });
public boolean checkFullSize(JTextComponent comp, String desc, int digit) {

  if (checkHarf(comp.getText())) {
   comp.requestFocus();
   JOptionPane.showMessageDialog(null, "full size");
   comp.requestFocus();
   return false;
  }

  if (comp.getText().length() > digit) {
   JOptionPane.showMessageDialog(null, "exceed digit");
   comp.requestFocus();
   return false;
  }

  return true;
 }

 /**
  * 是否为半?br>  * @param 字符?br>  * @return 半角true 全角false
  */
 private boolean checkHarf(String item) {

  byte[] bytes = item.getBytes();
  int beams = item.length();
  if (beams == bytes.length) {
   return true;
  } else {
   return false;
  }
 }



aaabbb 2007-04-09 09:22 发表评论
]]>
APPLET调用本地资源http://m.tkk7.com/Sprite-bei/archive/2007/02/07/98481.htmlaaabbbaaabbbWed, 07 Feb 2007 01:06:00 GMThttp://m.tkk7.com/Sprite-bei/archive/2007/02/07/98481.htmlhttp://m.tkk7.com/Sprite-bei/comments/98481.htmlhttp://m.tkk7.com/Sprite-bei/archive/2007/02/07/98481.html#Feedback2http://m.tkk7.com/Sprite-bei/comments/commentRss/98481.htmlhttp://m.tkk7.com/Sprite-bei/services/trackbacks/98481.html   
    在命令行中执行以下的语句Qjar   -cvf   MyApplet.jar   class  
   
  步骤二:(x)Q在|页中嵌入AppletQ ?
   
    q个|页的名字叫做FileReaderApplet.htmlQ下面是嵌入Applet部分的写法:(x)  
   
  QAPPLET  
  CODEBASE   =   "."  
  CODE   =   "jcomponent.FileReaderApplet.class"  
  ARCHIVE   ="MyClass.jar"  
  NAME   =   "TestApplet"  
  WIDTH   =   400  
  HEIGHT   =   300  
  HSPACE   =   0  
  VSPACE   =   0  
  ALIGN   =   middle  
  Q ?
  Q?APPLETQ   ?
   
   
    完成q个步骤后,q个Applet已经可以昄?jin)。但是还不能d本地的文件系l。 ?
   
    步骤三:(x)Q生成证书及(qing){֐Q ?
   
    请在命o(h)行环境下执行以下的命令:(x)  
   
       1、keytool   -genkey   -keystore   pepper.store   -alias   pepper  
   
    q个命o(h)用来产生一个密匙库Q执行完毕后应该在c:/admin中生一个pepper.store的文Ӟq里的pepper是我自己的名字,你可以对它进行修攏V另外在执行命o(h)的时候还有提CZ输入密匙库的密码Q这里你一定要CQ否则后面要用的时候无法输入。 ?
   
    2、keytool   -export   -keystore   pepper.store   -alias   pepper   -file   pepper.cert  
   
    q个命o(h)用来产生{֐时所要用的证书,同样q里的pepper也可以换成你自己需要的名字。这个命令执行完后在c:/admin中生一个pepper.cert的文件。 ?
   
    4、 ?jarsigner   -keystore   pepper.store   MyApplet.jar   pepper  
   
    q个命o(h)用上面生的证书我们的jar文gq行?jin)签名。 ?
   
    步骤四:(x)Q修Ҏ(gu)Ӟ(j)  
   
    1、 ?在c:/admin中生一个名为applet.policy的文Ӟ其内容如下:(x)  
   
  keystore   "file:c:   /admin/pepper.store",   "JKS";  
   
  grant   signedBy   "pepper"  
  {   permission   java.io.FilePermission   "Q<ALL   FILESQ>",   "read";  
  };  
     
   
    q个文g让由pepper{֐的Applet拥有本地所有文件的L限。 ?
   
    2、 ?修改${java.home}/jre/lib/security目录下的java.securityQ找C面这两行Q ?
   
  policy.url.1=file:${java.home}/lib/security/java.policy  
  policy.url.2=file:${user.home}/.java.policy    
   
    在下面添写第三行  
   
  policy.url.3=file:c:   /admin/applet.policy    
   
    完成q个修改后我们在前面创徏的applet.policy文g才有效。 ?
   
    步骤五:(x)Q{换html文gQ ?
   
    q行前面提到的HTMLConvert工具Q将原有的FileReaderApplet.html转化成下面的形式Q ?
   
  Q?--"CONVERTED_APPLET"--Q ?
  Q?--   CONVERTER   VERSION   1.3   --Q ?
  QOBJECT   classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"  
  WIDTH   =   400   HEIGHT   =   300   NAME   =   "TestApplet"   ALIGN   =   middle   VSPACE   =   0   HSPACE   =   0   codebase="  QPARAM   NAME   =   CODE   VALUE   =   "jcomponent.FileReaderApplet.class"   Q ?
  QPARAM   NAME   =   CODEBASE   VALUE   =   "."   Q ?
  QPARAM   NAME   =   ARCHIVE   VALUE   =   "MyApplet.jar"   Q ?
  QPARAM   NAME   =   NAME   VALUE   =   "TestApplet"   Q ?
   
  QPARAM   NAME="type"   VALUE="application/x-java-applet;version=1.3"Q ?
  QPARAM   NAME="scriptable"   VALUE="false"Q ?
  QCOMMENTQ ?
  QEMBED   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="
   
  Q?NOEMBEDQ</EMBEDQ ?
  Q?OBJECTQ ?
   
  Q?--  
  QAPPLET   CODE   =   "jcomponent.FileReaderApplet.class"   CODEBASE   =   "."   ARCHIVE   =   "MyApplet.jar"   WIDTH   =   400   HEIGHT   =   300   NAME   =   "TestApplet"   ALIGN   =   middle   VSPACE   =   0   HSPACE   =   0Q ?
   
   
  Q?APPLETQ ?
  --Q ?
  Q?--"END_CONVERTED_APPLET"--Q   ?
   
   
  大家不要看到q里的写法很复杂Q但是这些都是由HTMLConvert工具自动实现的。这个工h命o(h)行和囑Ş界面两种q行方式。 ?
   
    好了(jin)Q现在这个Applet可以q行d文g的功能了(jin)。如果你要考虑在Internet上实现这个AppletQ那么你也不需要在所有的客户端均做上面的步骤Q你只需要在你的服务器上创徏一个目录,例如c:/adminQ将q个目录映射?a >www.testApplet.com/admin
。这里的www.testApplet.com是一个假定的|址Q将pepper.cert、pepper.store、FileReaderApplet.html、MyApplet.jar以及(qing)applet.policy攑֜q个目录中,然后修改applet.policy文g如下Q ?
   
  keystore   "http://      
  grant   signedBy   "pepper"  
  {   permission   java.io.FilePermission   "Q<ALL   FILESQ>",   "read";  
  };    
   
    3、 ?而每个客L(fng)仅仅需要修改一下它们的${java.home}/jre/lib/security目录下的java.security文g如下Q ?
   
  policy.url.1=file:${java.home}/lib/security/java.policy  
  policy.url.2=file:${user.home}/.java.policy  
  policy.url.3=   http://  
www.testApplet.com/admin/applet.policy    
   
    当然每个客户端还是需要安装JRE?而且一定要安装与Y件相W合JRE版本


aaabbb 2007-02-07 09:06 发表评论
]]>
վ֩ģ壺 һƵ| Ƶվ| 99reѾƷƵۿ| Ƶ߹ۿ| avƬһ| һ͵Ů| ձһƬ2019| 97ԭѹۿ| ˾ƷƵ99߹ۿ| Avۺ辫Ʒ| 츾avҹ벻| Ƶ߲| þþӰԺ޾Ʒ| ӰԺ޹һҳ| ޳AƬ| ߹ۿլƵ| Ƭ߹ۿѹۿӰ | þ޾ƷĻ| ˳˳ۺþþ | þѾƷav| ޳aƬ߹ۿ| ˾þۺӰԺ| www޾Ʒþþ| ˳վ߲| ֳִӲƵ| Ůվ߿| ӰԺֻ߹ۿ| Ļ| ޾Ʒ߹ۿ| AV߲Ų| պƷרҹ| һƵ | ɫͼС˵ר| ۺϹƷһҳ| ҹƬ߹ۿ| һ| һ| Ʒ޾Ʒպ| ޹ƷAAAƬ| վ߹ۿ| һƬ߹ۿ|