<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.mxjava.com/styles/feedsky2.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.mxjava.com" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/mxjava" type="application/rss+xml"></fs:self_link><lastBuildDate>Wed, 10 Mar 2010 12:21:43 GMT</lastBuildDate><title>MXJAVA</title><description>关注Java相关技术，关注互联网。</description><image><url>http://www.feedsky.com/feed/mxjava/sc/gif</url><title>MXJAVA</title><link>http://www.mxjava.com</link></image><link>http://www.mxjava.com</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Wed, 10 Mar 2010 12:48:50 GMT</pubDate><item><title>java 数组实现队列</title><link>http://www.mxjava.com/queue.html</link><content:encoded>&lt;p&gt;　　对于 Java 来说，数据结构不象 C 语言那样需要自行实现，因为 Java 本身已经提供了丰富的数据结构。例如我们经常用来的 List、Map 等。不过自行实现一些数据结构不仅对我们的逻辑思维能力有帮助，并且让我们更加了解数据结构的底层实现。今天我们来说说 Java 中怎么利用数组来实现队列。&lt;/p&gt;
&lt;p&gt;　　首先了解一下什么是队列：队列是一种特殊的线性表，它只允许在表的前端进行删除操作，而在表的后端进行插入操作。进行插入操作的端称为队尾，进行删除操作的端称为队头。这也就是我们平常经常用说到的先进先出原则（FIFO）。Java 中的 List 就可以作为队列来使用，在队列尾部添加元素则使用 list.add 方法，从队列头部删除元素则使用 list.remove 方法。要用数组来实现，就必需定义进和出的下标，实现方法如下：&lt;span id=&quot;more-549&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
public class Queue {

	/** 默认长度 */
	private static final int DEFUALT_LENGTH = 5;

	/** 队列数据 */
	private Object[] objs;
	/** 队列头 */
	private int head = 0;
	/** 队列尾 */
	private int tail = 0;
	/** 队列可用长度 */
	private int length = 0;

	/**
	 * 初期化一个默认大小的数组
	 */
	public Queue() {
		this.objs = new Object[DEFUALT_LENGTH];
	}

	/**
	 * 初期化一个指定大小的数组
	 *
	 * @param int
	 */
	public Queue(int l) {
		if (l &gt; 0) {
			this.objs = new Object[l];
		} else {
			this.objs = new Object[DEFUALT_LENGTH];
		}
	}

	/**
	 * 入列
	 *
	 * @param obj
	 */
	public void enQueue(Object obj) {
		// 满位的场合
		if (isFull()) {
			// 增加队列容量
			enlarge();
			head = 0;
		}

		this.tail = (this.head + this.length) % this.objs.length;
		this.objs[this.tail] = obj;
		length++;
	}

	/**
	 * 出列
	 *
	 * @return Object
	 */
	public Object deQueue() {
		if (isEmpty()) {
			return null;
		}

		Object tempObj = this.objs[this.head];
		this.objs[this.head] = null;
		this.head = (this.head + 1) % (this.objs.length);
		this.length--;

		return tempObj;
	}

	/**
	 * 队列是否满
	 *
	 * @return boolean
	 */
	public boolean isFull() {
		return this.length == this.objs.length;
	}

	/**
	 * 队列是否为空
	 *
	 * @return boolean
	 */
	public boolean isEmpty() {
		return this.length == 0;
	}

	/**
	 * 扩展数组容量
	 */
	public void enlarge() {
		Object[] tempObjs = new Object[this.objs.length * 2];
		System.arraycopy(this.objs, 0, tempObjs, 0, this.objs.length);
		this.objs = tempObjs;
	}
}
&lt;/pre&gt;
&lt;img src=&quot;http://www.mxjava.com/?ak_action=api_record_view&amp;id=549&amp;type=feed&quot; alt=&quot;&quot; /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340237398/mxjava/feedsky/s.gif?r=http://www.mxjava.com/queue.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237398/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237398/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/queue.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>　　对于 Java 来说，数据结构不象 C 语言那样需要自行实现，因为 Java 本身已经提供了丰富的数据结构。例如我们经常用来的 List、Map 等。不过自行实现一些数据结构不仅对我们的逻辑思维能力有帮助，并且让我们更加了解数据结构的底层实现。今天我们来说说 Java 中怎么利用数组来实现队列。
　　首先了解一下什么是队列：队列是一种特殊的线性表，它只允许在表的前端进行删除操作，而在表的后端进行插入操作。进行插入操作的端称为队尾，进行删除操作的端称为队头。这也就是我们平常经常用说到的先进先出原则（FIFO）。Java 中的 List 就可以作为队列来使用，在队列尾部添加元素则使用 list.add 方法，从队列头部删除元素则使用 list.remove 方法。要用数组来实现，就必需定义进和出的下标，实现方法如下：

public class Queue {

	/** 默认长度 */
	private static final int DEFUALT_LENGTH = 5;

	/** 队列数据 */
	private Object[] objs;
	/** 队列头 */
	private int head = 0;
	/** 队列尾 */
	private int tail = 0;
	/** 队列可用长度 */
	private int length = 0;

	/**
	 * 初期化一个默认大小的数组
	 */
	public Queue() [...]&lt;img src=&quot;http://www1.feedsky.com/t1/340237398/mxjava/feedsky/s.gif?r=http://www.mxjava.com/queue.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237398/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237398/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>数据结构</category><category>JAVA开发</category><pubDate>Wed, 10 Mar 2010 20:21:43 +0800</pubDate><author>hiswing</author><comments>http://www.mxjava.com/queue.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=549</guid><dc:creator>hiswing</dc:creator><fs:srclink>http://www.mxjava.com/queue.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/340237398/1492496</fs:itemid></item><item><title>xml 和 Java Annotation 的优缺点对比</title><link>http://www.mxjava.com/xml-annotation.html</link><content:encoded>&lt;p&gt;　　《&lt;a href=&quot;http://www.mxjava.com/annotation-basic.html&quot;&gt;Java Annotation 基础&lt;/a&gt;》中我们简单地介绍了 Java Annotation 的作用以及 Java 标准的 Annotation 。今天我们来了解一下 xml 和 Annotation 各自作为配置项的优缺点。&lt;/p&gt;
&lt;p&gt;　　首先说说 xml 。目前 web 应用中几乎都使用 xml 作为配置项，例如我们常用的框架 Struts、Spring、Hibernate、IBatis 等等都采用 xml 作为配置。xml 之所以这么流行，是因为它的很多优点是其它技术的配置所无法替代的。&lt;br /&gt;
　　１、xml 作为可扩展标记语言最大的优势在于开发者能够为软件量身定制适用的标记，使代码更加通俗易懂。&lt;br /&gt;
　　２、利用 xml 配置能使软件更具扩展性。例如 Spring 将 class 间的依赖配置在 xml 中，最大限度地提升应用的可扩展性。&lt;br /&gt;
　　３、具有成熟的验证机制确保程序正确性。利用 Schema 或 DTD 可以对 xml 的正确性进行验证，避免了非法的配置导致应用程序出错。&lt;br /&gt;
　　４、修改配置而无需变动现有程序。&lt;br /&gt;
&lt;span id=&quot;more-567&quot;&gt;&lt;/span&gt;&lt;br /&gt;
　　虽然有如此多的好处，但毕竟没有什么万能的东西，xml 也有自身的缺点。&lt;br /&gt;
　　１、需要解析工具或类库的支持。&lt;br /&gt;
　　２、解析 xml 势必会影响应用程序性能，占用系统资源。&lt;br /&gt;
　　３、配置文件过多导致管理变得困难。&lt;br /&gt;
　　４、编译期无法对其配置项的正确性进行验证，或要查错只能在运行期。&lt;br /&gt;
　　５、IDE 无法验证配置项的正确性无能为力。&lt;br /&gt;
　　６、查错变得困难。往往配置的一个手误导致莫名其妙的错误。&lt;br /&gt;
　　７、开发人员不得不同时维护代码和配置文件，开发效率变得低下。&lt;br /&gt;
　　８、配置项与代码间存在潜规则。改变了任何一方都有可能影响另外一方。&lt;/p&gt;
&lt;p&gt;　　让我们来看看 Annotation 的优点。&lt;br /&gt;
　　１、保存在 class 文件中，降低维护成本。&lt;br /&gt;
　　２、无需工具支持，无需解析。&lt;br /&gt;
　　３、编译期即可验证正确性，查错变得容易。&lt;br /&gt;
　　４、提升开发效率。&lt;/p&gt;
&lt;p&gt;　　同样 Annotation 也不是万能的，它也有很多缺点。&lt;br /&gt;
　　１、若要对配置项进行修改，不得不修改 Java 文件，重新编译打包应用。&lt;br /&gt;
　　２、配置项编码在 Java 文件中，可扩展性差。&lt;/p&gt;
&lt;p&gt;　　总结：没有一个事物是万能的，同样 xml 和 Java Annotation 都有各自的优缺点。通过以上对比，细心的读者可能已经发现它们的优缺点恰恰是互补的。xml 的强项是 Annotation 所不具备的，而 Annotation 的优势也是 xml 所欠缺的。这也正是时下流行的 xml + Annotation 配置的原因所在。在下一篇日志中，我们将使用 xml 和 Annotation 以及 xml + Annotation 各自完成简单的对象注射功能，使读者更加深入地了解 xml 和 Annotation 的作用。&lt;/p&gt;
&lt;img src=&quot;http://www.mxjava.com/?ak_action=api_record_view&amp;id=567&amp;type=feed&quot; alt=&quot;&quot; /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340237396/mxjava/feedsky/s.gif?r=http://www.mxjava.com/xml-annotation.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237396/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237396/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/xml-annotation.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>　　《Java Annotation 基础》中我们简单地介绍了 Java Annotation 的作用以及 Java 标准的 Annotation 。今天我们来了解一下 xml 和 Annotation 各自作为配置项的优缺点。
　　首先说说 xml 。目前 web 应用中几乎都使用 xml 作为配置项，例如我们常用的框架 Struts、Spring、Hibernate、IBatis 等等都采用 xml 作为配置。xml 之所以这么流行，是因为它的很多优点是其它技术的配置所无法替代的。
　　１、xml 作为可扩展标记语言最大的优势在于开发者能够为软件量身定制适用的标记，使代码更加通俗易懂。
　　２、利用 xml 配置能使软件更具扩展性。例如 Spring 将 class 间的依赖配置在 xml 中，最大限度地提升应用的可扩展性。
　　３、具有成熟的验证机制确保程序正确性。利用 Schema 或 DTD 可以对 xml 的正确性进行验证，避免了非法的配置导致应用程序出错。
　　４、修改配置而无需变动现有程序。

　　虽然有如此多的好处，但毕竟没有什么万能的东西，xml 也有自身的缺点。
　　１、需要解析工具或类库的支持。
　　２、解析 xml 势必会影响应用程序性能，占用系统资源。
　　３、配置文件过多导致管理变得困难。
　　４、编译期无法对其配置项的正确性进行验证，或要查错只能在运行期。
　　５、IDE 无法验证配置项的正确性无能为力。
　　６、查错变得困难。往往配置的一个手误导致莫名其妙的错误。
　　７、开发人员不得不同时维护代码和配置文件，开发效率变得低下。
　　８、配置项与代码间存在潜规则。改变了任何一方都有可能影响另外一方。
　　让我们来看看 Annotation 的优点。
　　１、保存在 class 文件中，降低维护成本。
　　２、无需工具支持，无需解析。
　　３、编译期即可验证正确性，查错变得容易。
　　４、提升开发效率。
　　同样 Annotation 也不是万能的，它也有很多缺点。
　　１、若要对配置项进行修改，不得不修改 Java 文件，重新编译打包应用。
　　２、配置项编码在 Java 文件中，可扩展性差。
　　总结：没有一个事物是万能的，同样 xml [...]&lt;img src=&quot;http://www1.feedsky.com/t1/340237396/mxjava/feedsky/s.gif?r=http://www.mxjava.com/xml-annotation.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237396/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237396/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>JAVA开发</category><category>Annotation</category><pubDate>Wed, 03 Mar 2010 20:09:17 +0800</pubDate><author>hiswing</author><comments>http://www.mxjava.com/xml-annotation.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=567</guid><dc:creator>hiswing</dc:creator><fs:srclink>http://www.mxjava.com/xml-annotation.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/340237396/1492496</fs:itemid></item><item><title>java Annotation 基础</title><link>http://www.mxjava.com/annotation-basic.html</link><content:encoded>&lt;p&gt;　　配置文件的好处在于进一步降低耦合，使应用更易于扩展，即使对配置文件进行了修改也不需要对工程进行修改和重新编译。缺点也是显而易见，配置文件读取和解析需要花费一定的时间，配置文件过多时难以管理，IDE 无法对配置的正确性进行校验，给测试增加了难度。基于以上原因，Java 从１.５开始提供了 Annotation （注释，标注），它用来修饰应用程序的元素（类，方法，属性，参数，本地变量，包、元数据），编译器将其与元数据一同存储在 class 文件中，运行期间通过 Java 的反射来处理对其修饰元素的访问。Annotation 仅仅用来修饰元素，而不能影响代码的执行。只有通过其配套的框架或工具才能对其信息进行访问和处理。这一点与 xml 相同，没有 struts api 的 struts.xml 文件对程序不会起来任何作用。&lt;/p&gt;
&lt;p&gt;　　Ｑ：如何使用 Annotation ？&lt;br /&gt;
　　Ａ：首先让我们从 Java 定义的 Annotation 开始。@Override 可能是我们最常用到的 Annotation 之一了，Eclipse 中当子类中的某个方法覆写的父类中的方法时，会亮黄灯提示。若用 @Override 修饰该方法，黄灯熄灭。再让我们来看一个例子，当我们使用 new java.util.Date(2010, 2, 25); 来初始化日期类时，Eclipse 仍然会亮黄灯提示，这是因为该方法被 @Deprecated 修饰了，表示不推荐使用。从这两个例子我们能够了解到，Annotation 是在编译期校验的。这一点最大的好处是在编译期间就可对错误进行处理。若使用 xml 的话，只有在运行期才能得到错误信息。&lt;span id=&quot;more-561&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;　　Ｑ：Java 标准的 Annotation 有哪些？&lt;br /&gt;
　　Ａ：@Deprecated 相当于Javadoc的@deprecated，被@Deprecated标注的对象class, method等被注明为不推荐使用。主要用于javac等编译工具。&lt;br /&gt;
　　　　@Override 注明对象method重载了父类的方法。javac等编译工具编译时会根据此Annotation判断重载方法是否正确。&lt;br /&gt;
　　　　@SuppressWarnings 告诉javac等编译器忽略所指定的特定的警告信息。&lt;br /&gt;
　　　　@Target 被定义的annotation可以附加在那些对象上。&lt;br /&gt;
　　　　@Retention annotation的作用期间。&lt;br /&gt;
　　　　这里我们要重点介绍两个 Annotation ，因为这两个 Annotation 有一点特殊，因为它们并不是用来修饰代码，而是用来修饰 Annotation 的。&lt;br /&gt;
　　@Target 用来标注定义的 Annotation 可以附加在那些对象上。可选参数包括CONSTRUCTOR（构造器）、FIELD（属性及enum实例）LOCAL_VARIABLE（局部变量）、METHOD（方法）、PACKAGE（包）、PARAMETER（参数）以及TYPE（类、接口、注解类型、enum）。下例定义的 Annotation 被 @Target 修饰，表示该 Annotation 可以用来修饰属性和参数。&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
　　　　@Target( { FIELD,  PARAMETER})
　　　　public @interface Resource {
　　　　　　public String id() default &quot;&quot;;
　　　　}
&lt;/pre&gt;
&lt;p&gt;　　使用方法：&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
　　　　public class Mxjava {
　　　　　　@Resource(id=&quot;http://www.mxjava.com&quot;)
　　　　　　private String url;
　　　　　　public void getLog(@Resource(id=&quot;001&quot;) String logId) {...}
　　　　}
&lt;/pre&gt;
&lt;p&gt;　　@Retention 用标注在什么级别保存该 Annotation 。可选参数包括SOURCE（编译期会被忽略不做保存）、CLASS（编译后的 class 文件中可用，但虚拟机运行时忽略）、RUNTIME（运行期保留，若要使用反射机制读取 Annotation 信息的话，使用该项。）&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
　　　　@Target( { FIELD,  PARAMETER})
　　　　@Retention(RUNTIME)
　　　　public @interface Resource {
　　　　　　public String id() default &quot;&quot;;
　　　　}
&lt;/pre&gt;
&lt;p&gt;　　Ｑ：如何定义 Annotation ？&lt;br /&gt;
　　Ａ：先让我们来看一个最简单的 Annotation 。&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
　　　　@Target( { FIELD })
　　　　@Retention(RUNTIME)
　　　　public @interface Resource {
　　　　　　public String id() default &quot;&quot;;
　　　　}
&lt;/pre&gt;
&lt;p&gt;　　　　@Target 是 Java 标准的 Annotation，本例中指定定义的 Annotation 可以附加在属性（Field）上。@Retention 也是 Java 标准的 Annotation，指定作用期间是运行期。@interface 是用来修饰 Annotation 的，请注意，它不是 interface。这个关键字声明隐含了一个信息：它是继承了 java.lang.annotation.Annotation 接口，而不是声明了一个 interface。Annotation 成员的定义看上去很象方法，default &amp;#8220;&amp;#8221; 表示默认值为空字符串。使用方法如下：&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
　　　　public class mxjava {
　　　　　　@Resource(id=&quot;http://www.mxjava.com&quot;)
　　　　　　private String url;
　　　　}
&lt;/pre&gt;
&lt;p&gt;　　　　若没有配套的框架和工具，@Resource 是不起任何作用的。就象前面讲到的那样，它不会对代码的执行有任何影响。&lt;/p&gt;
&lt;p&gt;　　Ｑ：什么时候需要自定义 Annotation ？&lt;br /&gt;
　　Ａ：一般来说，若不做框架和工具的开发，一般情况下是不需要自定义 Annotation 的。&lt;/p&gt;
&lt;p&gt;　　下一篇日志，我们围绕 xml 配置文件和 Annotation 的共同点做进一步讨论。&lt;/p&gt;
&lt;img src=&quot;http://www.mxjava.com/?ak_action=api_record_view&amp;id=561&amp;type=feed&quot; alt=&quot;&quot; /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340237397/mxjava/feedsky/s.gif?r=http://www.mxjava.com/annotation-basic.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237397/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237397/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/annotation-basic.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>　　配置文件的好处在于进一步降低耦合，使应用更易于扩展，即使对配置文件进行了修改也不需要对工程进行修改和重新编译。缺点也是显而易见，配置文件读取和解析需要花费一定的时间，配置文件过多时难以管理，IDE 无法对配置的正确性进行校验，给测试增加了难度。基于以上原因，Java 从１.５开始提供了 Annotation （注释，标注），它用来修饰应用程序的元素（类，方法，属性，参数，本地变量，包、元数据），编译器将其与元数据一同存储在 class 文件中，运行期间通过 Java 的反射来处理对其修饰元素的访问。Annotation 仅仅用来修饰元素，而不能影响代码的执行。只有通过其配套的框架或工具才能对其信息进行访问和处理。这一点与 xml 相同，没有 struts api 的 struts.xml 文件对程序不会起来任何作用。
　　Ｑ：如何使用 Annotation ？
　　Ａ：首先让我们从 Java 定义的 Annotation 开始。@Override 可能是我们最常用到的 Annotation 之一了，Eclipse 中当子类中的某个方法覆写的父类中的方法时，会亮黄灯提示。若用 @Override 修饰该方法，黄灯熄灭。再让我们来看一个例子，当我们使用 new java.util.Date(2010, 2, 25); 来初始化日期类时，Eclipse 仍然会亮黄灯提示，这是因为该方法被 @Deprecated 修饰了，表示不推荐使用。从这两个例子我们能够了解到，Annotation 是在编译期校验的。这一点最大的好处是在编译期间就可对错误进行处理。若使用 xml 的话，只有在运行期才能得到错误信息。
　　Ｑ：Java 标准的 Annotation 有哪些？
　　Ａ：@Deprecated 相当于Javadoc的@deprecated，被@Deprecated标注的对象class, method等被注明为不推荐使用。主要用于javac等编译工具。
　　　　@Override 注明对象method重载了父类的方法。javac等编译工具编译时会根据此Annotation判断重载方法是否正确。
　　　　@SuppressWarnings 告诉javac等编译器忽略所指定的特定的警告信息。
　　　　@Target 被定义的annotation可以附加在那些对象上。
　　　　@Retention annotation的作用期间。
　　　　这里我们要重点介绍两个 Annotation ，因为这两个 Annotation 有一点特殊，因为它们并不是用来修饰代码，而是用来修饰 Annotation 的。
　　@Target [...]&lt;img src=&quot;http://www1.feedsky.com/t1/340237397/mxjava/feedsky/s.gif?r=http://www.mxjava.com/annotation-basic.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237397/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237397/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>JAVA开发</category><category>Annotation</category><pubDate>Thu, 25 Feb 2010 11:44:09 +0800</pubDate><author>hiswing</author><comments>http://www.mxjava.com/annotation-basic.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=561</guid><dc:creator>hiswing</dc:creator><fs:srclink>http://www.mxjava.com/annotation-basic.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/340237397/1492496</fs:itemid></item><item><title>用 Schema 验证 xml</title><link>http://www.mxjava.com/xml-schema.html</link><content:encoded>&lt;p&gt;在过去我们用 DTD 来定义 XML 文档的和法性，而现在可以利用 XML Schema （XML Schema Definition，XSD）来替代 DTD。同 DTD 相同，XML Schema 描述了 XML 文档的结构，既然如此，那么我们为什么要选择 XML Schema 而不是 DTD 呢？&lt;/p&gt;
&lt;p&gt;１、XML Schema 可针对未来的需求进行扩展，DTD 不易扩展。&lt;br /&gt;
２、XML Schema 更完善，功能更强大。&lt;br /&gt;
３、XML Schema 基于 XML 编写，一个 XML Schema 也是一个 XML 文件。DTD 不遵循 XML 语法，这表示你不得不多去学习另外一门语言。&lt;br /&gt;
４、XML Schema 支持数据类型，内置多种数据类型。DTD 数据类型有限。&lt;br /&gt;
５、XML Schema 支持命名空间，DTD 不支持命名空间。&lt;br /&gt;
６、XML Schema 在 2001年5月2日成为 W3C 标准。&lt;/p&gt;
&lt;p&gt;最近正在将 Grapevine 升级至第２代版本 ，将全 xml 配置转为 Annotation + xml 的方式。如此一来，将大大简化 xml 文件的配置，提高生产效率。我们来看看 Grapevine2 中最基础的 xml 配置是如何利用 XML Schema 进行验证的。&lt;span id=&quot;more-503&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;XML&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;grapevine&gt;
    &lt;grape id=&quot;resourceTestAbc&quot; class=&quot;test.TestAbc&quot; /&gt;
    &lt;grape id=&quot;stringName&quot; class=&quot;java.lang.String&quot; value=&quot;ok...&quot; /&gt;
&lt;/grapevine&gt;
&lt;/pre&gt;
&lt;p&gt;这是一个再简单不过的 xml 文件，仅仅包含了 grapevine 根元素和 grape 子元素。grape 子元素中包含了 id、class、value 三个属性。其中 id 和 class 为必选属性， value 为可选。再来看看 xsd （XML Schema）文件内容。&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;XML&quot;&gt;
&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot; ?&gt;
&lt;xs:schema xmlns:xs=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;
    &lt;xs:element name=&quot;grapevine&quot;&gt;
        &lt;xs:complexType&gt;
            &lt;xs:sequence&gt;
                &lt;xs:element name=&quot;grape&quot; maxOccurs=&quot;unbounded&quot;
                    minOccurs=&quot;0&quot;&gt;
                    &lt;xs:complexType&gt;
                        &lt;xs:attribute name=&quot;id&quot; type=&quot;xs:string&quot;
                            use=&quot;required&quot; /&gt;
                        &lt;xs:attribute name=&quot;class&quot; type=&quot;xs:string&quot;
                            use=&quot;required&quot; /&gt;
                        &lt;xs:attribute name=&quot;value&quot; type=&quot;xs:string&quot;/&gt;
                    &lt;/xs:complexType&gt;
                &lt;/xs:element&gt;
            &lt;/xs:sequence&gt;
        &lt;/xs:complexType&gt;
        &lt;xs:unique name=&quot;idUnique&quot;&gt;
            &lt;xs:selector xpath=&quot;.//grape&quot;/&gt;
            &lt;xs:field xpath=&quot;@id&quot;/&gt;
        &lt;/xs:unique&gt;
    &lt;/xs:element&gt;
&lt;/xs:schema&gt;
&lt;/pre&gt;
&lt;p&gt;在上面的 schema 中，我们使用了标准的命名空间 (xs)，与此命名空间相关联的 URI 是 Schema 的语言定义（Schema language definition），其标准值是 http://www.w3.org/2001/XMLSchema。&lt;/p&gt;
&lt;p&gt;接下来我们定义了 grapevine 元素，该元素包含了 grape 元素，grape 用 xs:element 定义，并由 xs:sequence 包围。maxOccurs=&amp;#8221;unbounded&amp;#8221; 表示该元素出现次数没有限制。minOccurs=&amp;#8221;0&amp;#8243; 表示该元素可以不出现。grape 元素的三个属性由 xs:attribute 定义，其中 type=&amp;#8221;xs:string&amp;#8221; 表示该属性的数据类型 （ XML Schema 拥有多种内建数据类型，如：xs:string、xs:integer、xs:boolean、xs:date 等）。use=&amp;#8221;required&amp;#8221; 表示该属性是必选的，若不定义表示该属性为可选的。&lt;/p&gt;
&lt;p&gt;我们定义相同 id 的 grape 元素在 grapevine 中是唯一的，所以必须对 grape 的 id 属性进行唯一性验证。xs:unique  用来定义一个唯一性验证，你也可以用多个 xs:unique 对多个元素或属性进行验证。这里我们只针对 id 属性，所以命名为 idUnique 。xs:selector 用来定义其范围，xs:field 定义验证的值。也可以针对元素内容进行验证，如下：&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;XML&quot;&gt;
&lt;id&gt;resourceTestAbc&lt;/id&gt;
&lt;xs:unique name=&quot;idUnique&quot;&gt;
&lt;xs:selector xpath=&quot;.//grape&quot;/&gt;
&lt;xs:field xpath=&quot;id&quot;/&gt;
&lt;/xs:unique&gt;
&lt;/pre&gt;
&lt;p&gt;利用xsd文件校验xml文件的java代码：&lt;/p&gt;
&lt;pre name=&quot;code&quot; class=&quot;java&quot;&gt;
try {
    SchemaFactory.newInstance(&quot;http://www.w3.org/2001/XMLSchema&quot;)
        .newSchema(new File(&quot;grapevine.xsd&quot;)).newValidator()
            .validate(new StreamSource(xmlPath));
} catch (Exception ex) {
// 验证失败
}
&lt;/pre&gt;
&lt;img src=&quot;http://www.mxjava.com/?ak_action=api_record_view&amp;id=503&amp;type=feed&quot; alt=&quot;&quot; /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340237399/mxjava/feedsky/s.gif?r=http://www.mxjava.com/xml-schema.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237399/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237399/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/xml-schema.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>在过去我们用 DTD 来定义 XML 文档的和法性，而现在可以利用 XML Schema （XML Schema Definition，XSD）来替代 DTD。同 DTD 相同，XML Schema 描述了 XML 文档的结构，既然如此，那么我们为什么要选择 XML Schema 而不是 DTD 呢？
１、XML Schema 可针对未来的需求进行扩展，DTD 不易扩展。
２、XML Schema 更完善，功能更强大。
３、XML Schema 基于 XML 编写，一个 XML Schema 也是一个 XML 文件。DTD 不遵循 XML 语法，这表示你不得不多去学习另外一门语言。
４、XML Schema 支持数据类型，内置多种数据类型。DTD 数据类型有限。
５、XML Schema 支持命名空间，DTD 不支持命名空间。
６、XML Schema 在 2001年5月2日成为 W3C 标准。
最近正在将 Grapevine 升级至第２代版本 ，将全 xml 配置转为 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/340237399/mxjava/feedsky/s.gif?r=http://www.mxjava.com/xml-schema.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237399/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237399/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>xml</category><category>JAVA</category><category>JAVA开发</category><category>schema</category><pubDate>Sun, 20 Dec 2009 19:07:05 +0800</pubDate><author>hiswing</author><comments>http://www.mxjava.com/xml-schema.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=503</guid><dc:creator>hiswing</dc:creator><fs:srclink>http://www.mxjava.com/xml-schema.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/340237399/1492496</fs:itemid></item><item><title>宝贝生日快乐</title><link>http://www.mxjava.com/%e5%ae%9d%e8%b4%9d%e7%94%9f%e6%97%a5%e5%bf%ab%e4%b9%90.html</link><content:encoded>&lt;p&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;去年的今天，对我们一家人来说都是最难忘最具有意义的一天，经过近10个月的孕育，宝贝终于来到了我们的身边。一年后的今天，宝贝已经学会走路，学会叫爸爸妈妈了。正是有了宝贝，才让我感受到为人父母的辛酸和甜蜜，才让我懂得了做父亲的责任和幸福。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;宝贝，祝你永远健康、幸福、快乐。爸爸妈妈永远爱你。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;img class=&quot;aligncenter&quot; src=&quot;http://pic.yupoo.com/hiswing/2025787b313c/ai596z27.jpg&quot; alt=&quot;&quot; width=&quot;500&quot; height=&quot;400&quot; /&gt;&lt;/p&gt;
&lt;img src=&quot;http://www.mxjava.com/?ak_action=api_record_view&amp;id=492&amp;type=feed&quot; alt=&quot;&quot; /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340237400/mxjava/feedsky/s.gif?r=http://www.mxjava.com/%e5%ae%9d%e8%b4%9d%e7%94%9f%e6%97%a5%e5%bf%ab%e4%b9%90.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237400/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237400/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/%e5%ae%9d%e8%b4%9d%e7%94%9f%e6%97%a5%e5%bf%ab%e4%b9%90.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>去年的今天，对我们一家人来说都是最难忘最具有意义的一天，经过近10个月的孕育，宝贝终于来到了我们的身边。一年后的今天，宝贝已经学会走路，学会叫爸爸妈妈了。正是有了宝贝，才让我感受到为人父母的辛酸和甜蜜，才让我懂得了做父亲的责任和幸福。
宝贝，祝你永远健康、幸福、快乐。爸爸妈妈永远爱你。&lt;img src=&quot;http://www1.feedsky.com/t1/340237400/mxjava/feedsky/s.gif?r=http://www.mxjava.com/%e5%ae%9d%e8%b4%9d%e7%94%9f%e6%97%a5%e5%bf%ab%e4%b9%90.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237400/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237400/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>幸福生活</category><category>宝宝</category><pubDate>Fri, 04 Dec 2009 18:45:48 +0800</pubDate><author>hiswing</author><comments>http://www.mxjava.com/%e5%ae%9d%e8%b4%9d%e7%94%9f%e6%97%a5%e5%bf%ab%e4%b9%90.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=492</guid><dc:creator>hiswing</dc:creator><fs:srclink>http://www.mxjava.com/%e5%ae%9d%e8%b4%9d%e7%94%9f%e6%97%a5%e5%bf%ab%e4%b9%90.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/340237400/1492496</fs:itemid></item><item><title>换了HTC Touch Pro</title><link>http://www.mxjava.com/touchpro.html</link><content:encoded>&lt;p&gt;以前买机器，总要在几个大品牌之间进行反复比较，而这次品牌基本上只考虑 HTC 的，原因很简单，windows mobile 操作系统。智能机出来没有多久，就买了摩托罗拉A780，linux 操作系统。当时对智能机没有认识，所以买了行货，要命的是居然买了个移动定制机，很多软件装不上，一气之下把系统刷了，也开始了解智能机。接下来就是我的 n70 了，Symbian 操作系统。机器相当稳定，运行速度也不错，软件丰富，安装了搜狗输入法后，打字速度超快。但是有一个致命伤，就是在接通电话后，很容易产生静电，导致断 线，屏幕上显示“444”。因为这个问题，我不得不打过去跟人家解释，很是尴尬。后来在网上查了很多相当资料，说是 n70 的通病（后来的版本似乎没有这个问题）。手机的三大操作系统玩了两个了，就差 windows mobile 了，而 HTC 已经做了多年了 windows mobile ，已经相当成熟，所以它就是我的不二选择了。本来想买凯撒的，但是由于年份较老，市面上机器基本上都是翻新机了，想找个十四天机都找不到了。于是在查阅了 各种资料，泡了n多 HTC 论坛后，选择了 Touch Pro 。也许有人会问，为什么不选择 Touch Pro 2 ？银子啊！&lt;/p&gt;
&lt;p&gt;这篇文章本应该当天就发的，但是自己对 Touch Pro 的了解都来源于网络，并没有亲身体会，所以无法对其进行评价。经过一个多月的使用，总结了一些优缺点供大家参考。&lt;span id=&quot;more-499&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;优点：１、528 Mhz 强悍的 CPU 保证了极品速度，由其是使用内置的 Wifi 无线上网，看视频，下载软件就如同在电脑上一样，反映迅速、流畅。（内置3G，但 还没用过，不评价）。２、VGA高清屏幕显示效果清晰锐利，太阳光下显示仍然非常清晰。３、TouchFLO 3D超炫的人机交互界面，华丽的操作方式，非常具有现代科技感（看看这个&lt;a href=&quot;http://v.youku.com/v_show/id_XNTk0MzY5MzY=.html&quot; target=&quot;_blank&quot;&gt;视频&lt;/a&gt;就 知道）。４、作为一款上偏向商务应用的产品，名片扫描软件自然必不可少，Touch Pro内置了蒙拓名片王扫描软件，在320万像素自动对焦摄像头的配合下，Touch Pro的识别率准确率相当高。５、像 QQ 聊天般的短信，这正是我所想要的。记得 n70 上有款软件也可以达到这样的效果，但是很不稳定，很多次短信到时，连提示音都没有了。&lt;/p&gt;
&lt;p&gt;缺点：１、电池不耐用。要是玩机的话，1340毫安时锂电池一天都用不了。不过也得理解，如此强悍的硬件配置用电量可想而知。为了能让电池用的久一点，不 知不安装了一款降频软件（仅在没有任务时降频），较果还不错。２、死机。这也许是安装了 Windows Mobile 机器的典型特征，刚买回第一天，就死了五六次。现在用的熟悉了，基本上不怎么死了（感情还是要培养地）。３、也许我太土，不会用 Touch Pro 的照相功能，每次按下拍照按钮后，它总是要习惯地对焦，大概需要一秒种左右的时间。想要抓拍到美好的瞬间着实不易（各位若是有懂的 Touch Pro 拍照的，请告诉我一下，先谢谢了）。&lt;/p&gt;
&lt;p&gt;总体来说 Touch Pro 绝对是款不错的 PPC ，强悍的核心硬件配置保证了运行速度、质量以及丰富的软件。美中不足的是，电池技术还需加紧脚步呀！&lt;/p&gt;
&lt;p&gt;&lt;img title=&quot;htc-touch-pro&quot; src=&quot;http://image-001.yo2cdn.com/wp-content/uploads/130/13080/2009/12/htc-touch-pro-official-021.jpg&quot; alt=&quot;htc-touch-pro&quot; width=&quot;720&quot; height=&quot;800&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/312288550/mxjava/feedsky/s.gif?r=http%3A//www.mxjava.com/my-new-phone.html&quot; border=&quot;0&quot; alt=&quot;&quot; width=&quot;0&quot; height=&quot;0&quot; /&gt;&lt;/p&gt;
&lt;img src=&quot;http://www.mxjava.com/?ak_action=api_record_view&amp;id=499&amp;type=feed&quot; alt=&quot;&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237401/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237401/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/touchpro.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>以前买机器，总要在几个大品牌之间进行反复比较，而这次品牌基本上只考虑 HTC 的，原因很简单，windows mobile 操作系统。智能机出来没有多久，就买了摩托罗拉A780，linux 操作系统。当时对智能机没有认识，所以买了行货，要命的是居然买了个移动定制机，很多软件装不上，一气之下把系统刷了，也开始了解智能机。接下来就是我的 n70 了，Symbian 操作系统。机器相当稳定，运行速度也不错，软件丰富，安装了搜狗输入法后，打字速度超快。但是有一个致命伤，就是在接通电话后，很容易产生静电，导致断 线，屏幕上显示“444”。因为这个问题，我不得不打过去跟人家解释，很是尴尬。后来在网上查了很多相当资料，说是 n70 的通病（后来的版本似乎没有这个问题）。手机的三大操作系统玩了两个了，就差 windows mobile 了，而 HTC 已经做了多年了 windows mobile ，已经相当成熟，所以它就是我的不二选择了。本来想买凯撒的，但是由于年份较老，市面上机器基本上都是翻新机了，想找个十四天机都找不到了。于是在查阅了 各种资料，泡了n多 HTC 论坛后，选择了 Touch Pro 。也许有人会问，为什么不选择 Touch Pro 2 ？银子啊！
这篇文章本应该当天就发的，但是自己对 Touch Pro 的了解都来源于网络，并没有亲身体会，所以无法对其进行评价。经过一个多月的使用，总结了一些优缺点供大家参考。
优点：１、528 Mhz 强悍的 CPU 保证了极品速度，由其是使用内置的 Wifi 无线上网，看视频，下载软件就如同在电脑上一样，反映迅速、流畅。（内置3G，但 还没用过，不评价）。２、VGA高清屏幕显示效果清晰锐利，太阳光下显示仍然非常清晰。３、TouchFLO 3D超炫的人机交互界面，华丽的操作方式，非常具有现代科技感（看看这个视频就 知道）。４、作为一款上偏向商务应用的产品，名片扫描软件自然必不可少，Touch Pro内置了蒙拓名片王扫描软件，在320万像素自动对焦摄像头的配合下，Touch Pro的识别率准确率相当高。５、像 QQ 聊天般的短信，这正是我所想要的。记得 n70 上有款软件也可以达到这样的效果，但是很不稳定，很多次短信到时，连提示音都没有了。
缺点：１、电池不耐用。要是玩机的话，1340毫安时锂电池一天都用不了。不过也得理解，如此强悍的硬件配置用电量可想而知。为了能让电池用的久一点，不 知不安装了一款降频软件（仅在没有任务时降频），较果还不错。２、死机。这也许是安装了 Windows Mobile 机器的典型特征，刚买回第一天，就死了五六次。现在用的熟悉了，基本上不怎么死了（感情还是要培养地）。３、也许我太土，不会用 Touch Pro 的照相功能，每次按下拍照按钮后，它总是要习惯地对焦，大概需要一秒种左右的时间。想要抓拍到美好的瞬间着实不易（各位若是有懂的 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/340237401/mxjava/feedsky/s.gif?r=http://www.mxjava.com/touchpro.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237401/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237401/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>手机</category><category>Blog</category><pubDate>Wed, 02 Dec 2009 18:52:51 +0800</pubDate><author>hiswing</author><comments>http://www.mxjava.com/touchpro.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=499</guid><dc:creator>hiswing</dc:creator><fs:srclink>http://www.mxjava.com/touchpro.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/340237401/1492496</fs:itemid></item><item><title>Mayaa不错的表示层框架</title><link>http://www.mxjava.com/mayaa.html</link><content:encoded>&lt;p&gt;在日本Mayaa很流行，也许是因为是日本人写的框架，总之现在很多日本的项目都用这个框架。&lt;/p&gt;
&lt;p&gt;Mayaa处于 web 体系的表示层，主要是将后台数据交给 html 显示。Mayaa的思路很不错，它的重点在于使得 html 更加单纯，将逻辑和设计进一步分离。即使程序已经写好，页面设计人员也可以很容易地对页面进行重构且不会影响到程序的正确性。开发人员也可以更清晰地对程 序进行修改和变更。为了做到这一点，Mayaa 的做法是为每个 .html 文件配置一个 .mayaa 文件，当访问该 .html 文件时，解析对应的 .mayaa 文件并将结果交给 html ，最终做为 response 输出到客户端。那么如何取出后台数据，又该怎么将数据交给 html 呢？看两段代码：&lt;/p&gt;
&lt;p&gt;html 文件：&amp;lt;div m:id=”test” id=”test”/&amp;gt;&lt;/p&gt;
&lt;p&gt;mayaa 文件：&amp;lt;m:write m:id=&amp;#8221;test&amp;#8221; value=&amp;#8221;${test}&amp;#8221; /&amp;gt;&lt;/p&gt;
&lt;p&gt;为 html 的项目追加 m:id 属性，在相应的 mayaa 文件中追加相同 m:id 的标签m:write 标签。这样一来，这两个文件的同一 m:id 的项目就绑定了，系统运行时，就会将 m:write 标签的 value交给绑定的 html 项目了。&lt;span id=&quot;more-497&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Mayaa 就是利用这些标签完成赋值、判断、循环等各种操作的。除了自身提供的标签以外，还可以使用 jsp 自定义标签。若你对诸如 Struts 等框架的标签更熟悉的话，也可以完全在 Mayaa 中使用。&lt;/p&gt;
&lt;p&gt;很多应用需要在赋值时调用 javascript 函数（如根据返回的 key 取消息信息），显然Mayaa 的开发者早就想到了这个问题，提供了&amp;lt;!&amp;#8211;[CDATA[]]&amp;#8211;&amp;gt;标签，在该标签中，不但可以写 javascript 方法，甚至可以调用后台 java 程序。&lt;/p&gt;
&lt;p&gt;&amp;lt;![CDATA[&lt;/p&gt;
&lt;p&gt;function getMessage(key){&lt;/p&gt;
&lt;p&gt;return Packages.com.mxjava.util.MessageUtil.getMessage(key);&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;]]&amp;gt;&lt;/p&gt;
&lt;p&gt;&amp;lt;m:write m:id=&amp;#8221;test&amp;#8221; value=&amp;#8221;${ getMessage(test)}&amp;#8221; /&amp;gt;&lt;/p&gt;
&lt;p&gt;Mayaa 是不不错的表示层框架，几乎已经做到逻辑与设计完全分离。美中不足的是为了将解析后的数据交给html 显示，Mayaa 不得不强制在 html 项目上追加m:id 属性。虽然 html 项目追加属性是没有什么影响的，不过对设计人员来说，可能会感到迷惑，在一些编辑器下，会提示错误信息。若能直接以html 的 id 属性作为赋值依据的话，将完美消除以上误会，难道技术上还存在什么难题吗？&lt;/p&gt;
&lt;img src=&quot;http://www.mxjava.com/?ak_action=api_record_view&amp;id=497&amp;type=feed&quot; alt=&quot;&quot; /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340237402/mxjava/feedsky/s.gif?r=http://www.mxjava.com/mayaa.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237402/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237402/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/mayaa.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>在日本Mayaa很流行，也许是因为是日本人写的框架，总之现在很多日本的项目都用这个框架。
Mayaa处于 web 体系的表示层，主要是将后台数据交给 html 显示。Mayaa的思路很不错，它的重点在于使得 html 更加单纯，将逻辑和设计进一步分离。即使程序已经写好，页面设计人员也可以很容易地对页面进行重构且不会影响到程序的正确性。开发人员也可以更清晰地对程 序进行修改和变更。为了做到这一点，Mayaa 的做法是为每个 .html 文件配置一个 .mayaa 文件，当访问该 .html 文件时，解析对应的 .mayaa 文件并将结果交给 html ，最终做为 response 输出到客户端。那么如何取出后台数据，又该怎么将数据交给 html 呢？看两段代码：
html 文件：&amp;#60;div m:id=”test” id=”test”/&amp;#62;
mayaa 文件：&amp;#60;m:write m:id=&amp;#8221;test&amp;#8221; value=&amp;#8221;${test}&amp;#8221; /&amp;#62;
为 html 的项目追加 m:id 属性，在相应的 mayaa 文件中追加相同 m:id 的标签m:write 标签。这样一来，这两个文件的同一 m:id 的项目就绑定了，系统运行时，就会将 m:write 标签的 value交给绑定的 html 项目了。
Mayaa 就是利用这些标签完成赋值、判断、循环等各种操作的。除了自身提供的标签以外，还可以使用 jsp 自定义标签。若你对诸如 Struts 等框架的标签更熟悉的话，也可以完全在 Mayaa 中使用。
很多应用需要在赋值时调用 javascript 函数（如根据返回的 [...]&lt;img src=&quot;http://www1.feedsky.com/t1/340237402/mxjava/feedsky/s.gif?r=http://www.mxjava.com/mayaa.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237402/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237402/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>JAVA</category><category>mayaa</category><category>JAVA开发</category><pubDate>Fri, 27 Nov 2009 11:49:09 +0800</pubDate><author>hiswing</author><comments>http://www.mxjava.com/mayaa.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=497</guid><dc:creator>hiswing</dc:creator><fs:srclink>http://www.mxjava.com/mayaa.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/340237402/1492496</fs:itemid></item><item><title>希望这是最后一次</title><link>http://www.mxjava.com/last-moving.html</link><content:encoded>&lt;p&gt;已经记不起是第几次写这篇文章了，每次都是无奈的，每次也会在结尾的地方写上“希望这是最后一次”。而每次过后又不得不重新开始寻找稳定的地方。&lt;/p&gt;
&lt;p&gt;最早写 blog 是从 2004 年，由于工作需要，经常会在网站查找一些资料。无意中找到了 竹笋炒肉 的网站，当时并不知道是 blog ，只是觉得拥有这样一个个人网站也不错。从此开始在网站寻找这方面的服务，于是就找到了这些服务商：blogdirver、doNews、CSDN、阳光博客、和讯博客、javaresearch、blogjava &amp;#8230;&amp;#8230; 也在这些 blog 网站上踏上了自己的足迹。最然免费的午餐大家都想吃，但免费的东西吃起来似乎并不容易。因为这些 blog 服务商能交给用户自主的权限实在太少，很多需求无法满足。为了能使 blog 做的更象回事，于是购买了虚拟空间和域名架设起自己的网站。网站程序也用过不少，最早用过的 asp blog 程序 应该是 Z-Blog 和PJBlog 了。到后来改成了流行的 php 程序 sablog、bo-blog、wordpress。自从2006年底开始使用 wordpress 以来，就再也没有更换过程序。说起来，也算是 wordpress 的粉丝了。&lt;span id=&quot;more-486&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;自己架设 blog 程序有很多好处，首先可以学习到很多 php 及经营网站方面的知识，其次自己拥有着对网站的绝对权限，可以任意修改和变更。这些都是在传统 blog 服务商那里学不到的。但自己架设 blog 也有很多问题，比如空间的稳定性，这是令人最头痛的事情。刚开始时买国内的空间，但《&lt;a href=&quot;http://www.mxjava.com/trash-space.html&quot;&gt;我的网站永远远离嘉禾&lt;/a&gt;》这样的遭遇让我对国内的空间望而却步。于是开始寻找国外的空间，不巧的是，当我还没来得及称赞国外服务器的稳定性的时候，服务器被河蟹了。没办法，将网站搬到了传说中的门户通。虽然会弹一些广告，也经常掉链子，但至少还能证明网站还在。就这样过了几个月，原本以为不用再搬了，可谁知道门户通开始整顿了，要求备案，通过评审后才可以开通。很快提交了备案信息，然后开始漫长的等待，这种等待让我想起了提交简历后的那种感觉。等到 google 已经删除了我网站的链接后仍然没有评审通过（也许根本还没轮到我）。就这样，又重新开始寻找空间。&lt;/p&gt;
&lt;p&gt;yo2 和 72松都是很早以前就注册了的，一直没有使用。经过认真仔细的比较后，决定将网站搬迁至此。原因有二，首先 yo2 的自主性要比 72 松更胜一筹，可以上传自己的主题，并且可以编辑主题。其次 yo2 的域名绑定是收费的。免费的东西不一定好吃，用钱买的吃的放心。这也许就是多年来被免费搞怕了的总结吧。&lt;/p&gt;
&lt;p&gt;刚刚购买了2个yo2的base服务，一个我的，一个我家宝宝的。呵呵~~不管走到哪里，我们都会在一起拼搏。&lt;/p&gt;
&lt;p&gt;yo2网络速度实在不咋地，公司用的网通，虽然有限速，但感觉速度还可以。家里用的是电信，速度就不行了。一般网页打开原则是6秒，但别说6秒 了，16 秒都打不开。这我都能理解，毕竟yo2还在发展阶段，还有很长的路要走，需要我们和更多资金的支持。就比如 72松吧，很有个性的Blog服务商，一切都免费的。自己不放广告，也不允许松子放广告，如何盈利的确是个大问题。最近经常听到有人说 72松要倒，我并不吃惊，但令人遗憾。如果你喜欢yo2，希望在这里呆下去，那么也请购买yo2的服务吧，有了大家的支持，我想yo2走的会更稳一些。&lt;/p&gt;
&lt;p&gt;最后还是补上那句不想再提起的老话：“希望这是最后一次”。&lt;/p&gt;
&lt;img src=&quot;http://www.mxjava.com/?ak_action=api_record_view&amp;id=486&amp;type=feed&quot; alt=&quot;&quot; /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340237403/mxjava/feedsky/s.gif?r=http://www.mxjava.com/last-moving.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237403/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237403/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/last-moving.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>已经记不起是第几次写这篇文章了，每次都是无奈的，每次也会在结尾的地方写上“希望这是最后一次”。而每次过后又不得不重新开始寻找稳定的地方。
最早写 blog 是从 2004 年，由于工作需要，经常会在网站查找一些资料。无意中找到了 竹笋炒肉 的网站，当时并不知道是 blog ，只是觉得拥有这样一个个人网站也不错。从此开始在网站寻找这方面的服务，于是就找到了这些服务商：blogdirver、doNews、CSDN、阳光博客、和讯博客、javaresearch、blogjava &amp;#8230;&amp;#8230; 也在这些 blog 网站上踏上了自己的足迹。最然免费的午餐大家都想吃，但免费的东西吃起来似乎并不容易。因为这些 blog 服务商能交给用户自主的权限实在太少，很多需求无法满足。为了能使 blog 做的更象回事，于是购买了虚拟空间和域名架设起自己的网站。网站程序也用过不少，最早用过的 asp blog 程序 应该是 Z-Blog 和PJBlog 了。到后来改成了流行的 php 程序 sablog、bo-blog、wordpress。自从2006年底开始使用 wordpress 以来，就再也没有更换过程序。说起来，也算是 wordpress 的粉丝了。
自己架设 blog 程序有很多好处，首先可以学习到很多 php 及经营网站方面的知识，其次自己拥有着对网站的绝对权限，可以任意修改和变更。这些都是在传统 blog 服务商那里学不到的。但自己架设 blog 也有很多问题，比如空间的稳定性，这是令人最头痛的事情。刚开始时买国内的空间，但《我的网站永远远离嘉禾》这样的遭遇让我对国内的空间望而却步。于是开始寻找国外的空间，不巧的是，当我还没来得及称赞国外服务器的稳定性的时候，服务器被河蟹了。没办法，将网站搬到了传说中的门户通。虽然会弹一些广告，也经常掉链子，但至少还能证明网站还在。就这样过了几个月，原本以为不用再搬了，可谁知道门户通开始整顿了，要求备案，通过评审后才可以开通。很快提交了备案信息，然后开始漫长的等待，这种等待让我想起了提交简历后的那种感觉。等到 google 已经删除了我网站的链接后仍然没有评审通过（也许根本还没轮到我）。就这样，又重新开始寻找空间。
yo2 和 72松都是很早以前就注册了的，一直没有使用。经过认真仔细的比较后，决定将网站搬迁至此。原因有二，首先 yo2 的自主性要比 72 松更胜一筹，可以上传自己的主题，并且可以编辑主题。其次 yo2 的域名绑定是收费的。免费的东西不一定好吃，用钱买的吃的放心。这也许就是多年来被免费搞怕了的总结吧。
刚刚购买了2个yo2的base服务，一个我的，一个我家宝宝的。呵呵~~不管走到哪里，我们都会在一起拼搏。
yo2网络速度实在不咋地，公司用的网通，虽然有限速，但感觉速度还可以。家里用的是电信，速度就不行了。一般网页打开原则是6秒，但别说6秒 了，16 秒都打不开。这我都能理解，毕竟yo2还在发展阶段，还有很长的路要走，需要我们和更多资金的支持。就比如 72松吧，很有个性的Blog服务商，一切都免费的。自己不放广告，也不允许松子放广告，如何盈利的确是个大问题。最近经常听到有人说 72松要倒，我并不吃惊，但令人遗憾。如果你喜欢yo2，希望在这里呆下去，那么也请购买yo2的服务吧，有了大家的支持，我想yo2走的会更稳一些。
最后还是补上那句不想再提起的老话：“希望这是最后一次”。&lt;img src=&quot;http://www1.feedsky.com/t1/340237403/mxjava/feedsky/s.gif?r=http://www.mxjava.com/last-moving.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237403/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237403/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>虚拟空间</category><category>Blog</category><pubDate>Thu, 26 Nov 2009 18:39:07 +0800</pubDate><author>hiswing</author><comments>http://www.mxjava.com/last-moving.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/?p=486</guid><dc:creator>hiswing</dc:creator><fs:srclink>http://www.mxjava.com/last-moving.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/340237403/1492496</fs:itemid></item><item><title>Grape 开发日志  – 2</title><link>http://www.mxjava.com/grape-develop-2.html</link><content:encoded>&lt;p&gt;
      &amp;#12288;&amp;#12288;&amp;#26152;&amp;#22825;&amp;#36861;&amp;#21152;&amp;#20102;&amp;#19968;&amp;#20123;&amp;#21151;&amp;#33021;&amp;#65292;&amp;#32463;&amp;#36807;&amp;#27979;&amp;#35797;&amp;#21457;&amp;#29616;&amp;#20102;&amp;#20960;&amp;#20010;&amp;#38382;&amp;#39064;&amp;#65292;&amp;#20170;&amp;#22825;&amp;#23545;&amp;#20854;&amp;#36827;&amp;#34892;&amp;#20102;&amp;#20462;&amp;#27491;&amp;#12290;
    &lt;/p&gt;
&lt;p&gt;
      &amp;#65297;&amp;#12289;&amp;#23545;&amp;#33258;&amp;#23450;&amp;#20041;&amp;#26641;&amp;#33410;&amp;#28857;&amp;#22270;&amp;#26631;&amp;#30340;&amp;#25913;&amp;#36827;&amp;#12290;
    &lt;/p&gt;
&lt;p&gt;
      &amp;#12288;&amp;#12288;&amp;#38382;&amp;#39064;&amp;#65306;&amp;#33258;&amp;#23450;&amp;#20041;&amp;#26641;&amp;#33410;&amp;#28857;&amp;#22270;&amp;#26631;&amp;#26159;&amp;#29992;&amp;#25991;&amp;#20214;&amp;#36873;&amp;#25321;&amp;#26694;&amp;#65288;JFileChooser&amp;#65289;&amp;#23454;&amp;#29616;&amp;#30340;&amp;#12290;&amp;#20294;&amp;#26159; Swing &amp;#30340; JFileChooser&lt;br /&gt;
      &amp;#26159;&amp;#19981;&amp;#25903;&amp;#25345;&amp;#22270;&amp;#29255;&amp;#39044;&amp;#35272;&amp;#30340;&amp;#65292;&amp;#36825;&amp;#26679;&amp;#20351;&amp;#29992;&amp;#36215;&amp;#26469;&amp;#38750;&amp;#24120;&amp;#19981;&amp;#26041;&amp;#20415;&amp;#12290;
    &lt;/p&gt;
&lt;p&gt;
      &amp;#12288;&amp;#12288;&amp;#25913;&amp;#36827;&amp;#65306;&amp;#22312;&amp;#25991;&amp;#20214;&amp;#36873;&amp;#25321;&amp;#26694;&amp;#21491;&amp;#20391;&amp;#36861;&amp;#21152;&amp;#20102;&amp;#22270;&amp;#29255;&amp;#39044;&amp;#35272;&amp;#26694;&amp;#12290;&amp;#24403;&amp;#36873;&amp;#20013;&amp;#26576;&amp;#20010;&amp;#22270;&amp;#29255;&amp;#26102;&amp;#65292;&amp;#35813;&amp;#26694;&amp;#20250;&amp;#26174;&amp;#31034;&amp;#20986;&amp;#22270;&amp;#29255;&amp;#12290;
    &lt;/p&gt;
&lt;p&gt;
      &amp;#65298;&amp;#12289;&amp;#20462;&amp;#27491;&amp;#20102;&amp;#28857;&amp;#20987;&amp;#24377;&amp;#20986;&amp;#30340;&amp;#23494;&amp;#30721;&amp;#36755;&amp;#20837;&amp;#26694;&amp;#30340;&amp;#8220;&amp;#21462;&amp;#28040;&amp;#8221;&amp;#25353;&amp;#38062;&amp;#21518;&amp;#25991;&amp;#31456;&amp;#20381;&amp;#28982;&amp;#34987;&amp;#25171;&amp;#24320;&amp;#30340; bug&amp;#12290;
    &lt;/p&gt;
&lt;p&gt;
      &amp;#65299;&amp;#12289;&amp;#20462;&amp;#27491;&amp;#20102;&amp;#21487;&amp;#20462;&amp;#25913;&amp;#26377;&amp;#23494;&amp;#30721;&amp;#25991;&amp;#31456;&amp;#26631;&amp;#39064;&amp;#30340; bug&amp;#12290;
    &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://pic.yupoo.com/hiswing/15198838ff87/szkktu5w.jpg&quot;&gt;    &lt;/p&gt;
&lt;img src=&quot;http://www.mxjava.com/?ak_action=api_record_view&amp;id=341&amp;type=feed&quot; alt=&quot;&quot; /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340237404/mxjava/feedsky/s.gif?r=http://www.mxjava.com/grape-develop-2.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237404/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237404/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/grape-develop-2.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>&amp;#12288;&amp;#12288;&amp;#26152;&amp;#22825;&amp;#36861;&amp;#21152;&amp;#20102;&amp;#19968;&amp;#20123;&amp;#21151;&amp;#33021;&amp;#65292;&amp;#32463;&amp;#36807;&amp;#27979;&amp;#35797;&amp;#21457;&amp;#29616;&amp;#20102;&amp;#20960;&amp;#20010;&amp;#38382;&amp;#39064;&amp;#65292;&amp;#20170;&amp;#22825;&amp;#23545;&amp;#20854;&amp;#36827;&amp;#34892;&amp;#20102;&amp;#20462;&amp;#27491;&amp;#12290;
    

      &amp;#65297;&amp;#12289;&amp;#23545;&amp;#33258;&amp;#23450;&amp;#20041;&amp;#26641;&amp;#33410;&amp;#28857;&amp;#22270;&amp;#26631;&amp;#30340;&amp;#25913;&amp;#36827;&amp;#12290;
    

      &amp;#12288;&amp;#12288;&amp;#38382;&amp;#39064;&amp;#65306;&amp;#33258;&amp;#23450;&amp;#20041;&amp;#26641;&amp;#33410;&amp;#28857;&amp;#22270;&amp;#26631;&amp;#26159;&amp;#29992;&amp;#25991;&amp;#20214;&amp;#36873;&amp;#25321;&amp;#26694;&amp;#65288;JFileChooser&amp;#65289;&amp;#23454;&amp;#29616;&amp;#30340;&amp;#12290;&amp;#20294;&amp;#26159; Swing &amp;#30340; JFileChooser
      &amp;#26159;&amp;#19981;&amp;#25903;&amp;#25345;&amp;#22270;&amp;#29255;&amp;#39044;&amp;#35272;&amp;#30340;&amp;#65292;&amp;#36825;&amp;#26679;&amp;#20351;&amp;#29992;&amp;#36215;&amp;#26469;&amp;#38750;&amp;#24120;&amp;#19981;&amp;#26041;&amp;#20415;&amp;#12290;
    

      &amp;#12288;&amp;#12288;&amp;#25913;&amp;#36827;&amp;#65306;&amp;#22312;&amp;#25991;&amp;#20214;&amp;#36873;&amp;#25321;&amp;#26694;&amp;#21491;&amp;#20391;&amp;#36861;&amp;#21152;&amp;#20102;&amp;#22270;&amp;#29255;&amp;#39044;&amp;#35272;&amp;#26694;&amp;#12290;&amp;#24403;&amp;#36873;&amp;#20013;&amp;#26576;&amp;#20010;&amp;#22270;&amp;#29255;&amp;#26102;&amp;#65292;&amp;#35813;&amp;#26694;&amp;#20250;&amp;#26174;&amp;#31034;&amp;#20986;&amp;#22270;&amp;#29255;&amp;#12290;
    

      [...]&lt;img src=&quot;http://www1.feedsky.com/t1/340237404/mxjava/feedsky/s.gif?r=http://www.mxjava.com/grape-develop-2.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237404/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237404/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>作品</category><category>Skin</category><category>GRAPE</category><category>JAVA</category><category>Swing</category><pubDate>Thu, 15 Oct 2009 00:17:12 +0800</pubDate><author>hiswing</author><comments>http://www.mxjava.com/grape-develop-2.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/blog/archives/341.html</guid><dc:creator>hiswing</dc:creator><fs:srclink>http://www.mxjava.com/grape-develop-2.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/340237404/1492496</fs:itemid></item><item><title>Grape 开发日志 – 1</title><link>http://www.mxjava.com/grape-develop-1.html</link><content:encoded>&lt;p&gt;今天比较空闲，把 Grape 做了一点修改。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;１、修改了几个 bug ：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;a、修复了更换皮肤导致所有打开的文章变为修改状态。&lt;/p&gt;
&lt;p&gt;b、修复了设置文章为“只读”后，状态栏没有改变。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;２、修改并追加了几个小功能：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;a、密码输入框改为了 JPasswordField。&lt;/p&gt;
&lt;p&gt;b、追加了文章密码设置。&lt;/p&gt;
&lt;p&gt;c、查找对话框显示时，将选择的文字做为要查找的对象。&lt;/p&gt;
&lt;p&gt;d、自定义节点（文章）图标。&lt;span id=&quot;more-333&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;３、接下来的事情：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;a、实现自动保存功能。&lt;/p&gt;
&lt;p&gt;b、实现文章提醒功能。&lt;/p&gt;
&lt;p&gt;c、追加“显示”菜单，用来控制各个功能模块（Tab）是否显示。&lt;/p&gt;
&lt;p&gt;d、追加功能模块（Tab）拖拽功能。&lt;/p&gt;
&lt;p&gt;e、实现全库检索功能。&lt;/p&gt;
&lt;p&gt;f、实现文件和程序的关联。（即：默认使用 Grape 打开 *.grp 文件）&lt;/p&gt;
&lt;p&gt;g、修改“快速启动”和“文件链接”为文件样式。&lt;/p&gt;
&lt;p&gt;f、追加剪切板管理工具。&lt;/p&gt;
&lt;img src=&quot;http://www.mxjava.com/?ak_action=api_record_view&amp;id=333&amp;type=feed&quot; alt=&quot;&quot; /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/340237405/mxjava/feedsky/s.gif?r=http://www.mxjava.com/grape-develop-1.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237405/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237405/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.mxjava.com/grape-develop-1.html/feed</wfw:commentRss><slash:comments>0</slash:comments><description>今天比较空闲，把 Grape 做了一点修改。
１、修改了几个 bug ：
a、修复了更换皮肤导致所有打开的文章变为修改状态。
b、修复了设置文章为“只读”后，状态栏没有改变。
２、修改并追加了几个小功能：
a、密码输入框改为了 JPasswordField。
b、追加了文章密码设置。
c、查找对话框显示时，将选择的文字做为要查找的对象。
d、自定义节点（文章）图标。
３、接下来的事情：
a、实现自动保存功能。
b、实现文章提醒功能。
c、追加“显示”菜单，用来控制各个功能模块（Tab）是否显示。
d、追加功能模块（Tab）拖拽功能。
e、实现全库检索功能。
f、实现文件和程序的关联。（即：默认使用 Grape 打开 *.grp 文件）
g、修改“快速启动”和“文件链接”为文件样式。
f、追加剪切板管理工具。&lt;img src=&quot;http://www1.feedsky.com/t1/340237405/mxjava/feedsky/s.gif?r=http://www.mxjava.com/grape-develop-1.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/mxjava/340237405/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/mxjava/340237405/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>作品</category><category>Skin</category><category>GRAPE</category><category>JAVA</category><category>Swing</category><pubDate>Wed, 14 Oct 2009 00:52:28 +0800</pubDate><author>hiswing</author><comments>http://www.mxjava.com/grape-develop-1.html#comments</comments><guid isPermaLink="false">http://www.mxjava.com/blog/archives/333.html</guid><dc:creator>hiswing</dc:creator><fs:srclink>http://www.mxjava.com/grape-develop-1.html</fs:srclink><fs:srcfeed>http://www.mxjava.com/index.php/feed</fs:srcfeed><fs:itemid>feedsky/mxjava/~7954797/340237405/1492496</fs:itemid></item></channel></rss>