﻿<?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-仿冒+改良=创新</title><link>http://www.blogjava.net/obpm/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 30 Apr 2026 13:11:56 GMT</lastBuildDate><pubDate>Thu, 30 Apr 2026 13:11:56 GMT</pubDate><ttl>60</ttl><item><title>Apache Http Server与Tomcat实现负载均衡和集群</title><link>http://www.blogjava.net/obpm/archive/2011/06/22/352814.html</link><dc:creator>obpm</dc:creator><author>obpm</author><pubDate>Wed, 22 Jun 2011 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/obpm/archive/2011/06/22/352814.html</guid><wfw:comment>http://www.blogjava.net/obpm/comments/352814.html</wfw:comment><comments>http://www.blogjava.net/obpm/archive/2011/06/22/352814.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/obpm/comments/commentRss/352814.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/obpm/services/trackbacks/352814.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一、分布式实现原理&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如上图所示，主要通过Apache-Server作为中转服务器，实现多个tomcat服务器之间的分布式处理，用户直接请求Apache-Server，然后Apache-Server会将请求分发到具体的tomcat-server，之...&nbsp;&nbsp;<a href='http://www.blogjava.net/obpm/archive/2011/06/22/352814.html'>阅读全文</a><img src ="http://www.blogjava.net/obpm/aggbug/352814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/obpm/" target="_blank">obpm</a> 2011-06-22 16:09 <a href="http://www.blogjava.net/obpm/archive/2011/06/22/352814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口和抽象类的区别（转载）</title><link>http://www.blogjava.net/obpm/archive/2010/11/07/337451.html</link><dc:creator>obpm</dc:creator><author>obpm</author><pubDate>Sun, 07 Nov 2010 05:57:00 GMT</pubDate><guid>http://www.blogjava.net/obpm/archive/2010/11/07/337451.html</guid><wfw:comment>http://www.blogjava.net/obpm/comments/337451.html</wfw:comment><comments>http://www.blogjava.net/obpm/archive/2010/11/07/337451.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/obpm/comments/commentRss/337451.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/obpm/services/trackbacks/337451.html</trackback:ping><description><![CDATA[从设计理念层面看abstract class和interface <br />
<br />
上面主要从语法定义和编程的角度论述了abstract class和interface的区别，这些层面的区别是比较低层次的、非本质的。本小节将从另一个层面：abstract class和interface所反映出的设计理念，来分析一下二者的区别。作者认为，从这个层面进行分析才能理解二者概念的本质所在。 <br />
<br />
前面已经提到过，abstarct class在Java语言中体现了一种继承关系，要想使得继承关系合理，父类和派生类之间必须存在"is a"关系，即父类和派生类在概念本质上应该是相同的（参考文献〔3〕中有关于"is a"关系的大篇幅深入的论述，有兴趣的读者可以参考）。对于interface 来说则不然，并不要求interface的实现者和interface定义在概念本质上是一致的，仅仅是实现了interface定义的契约而已。为了使论述便于理解，下面将通过一个简单的实例进行说明。 <br />
<br />
考虑这样一个例子，假设在我们的问题领域中有一个关于Door的抽象概念，该Door具有执行两个动作open和close，此时我们可以通过abstract class或者interface来定义一个表示该抽象概念的类型，定义方式分别如下所示： <br />
<br />
使用abstract class方式定义Door： <br />
<br />
abstract class Door { <br />
abstract void open(); <br />
abstract void close()； <br />
} <br />
<br />
<br />
使用interface方式定义Door： <br />
<br />
<br />
interface Door { <br />
void open(); <br />
void close(); <br />
} <br />
<br />
<br />
其他具体的Door类型可以extends使用abstract class方式定义的Door或者implements使用interface方式定义的Door。看起来好像使用abstract class和interface没有大的区别。 <br />
<br />
如果现在要求Door还要具有报警的功能。我们该如何设计针对该例子的类结构呢（在本例中，主要是为了展示abstract class和interface反映在设计理念上的区别，其他方面无关的问题都做了简化或者忽略）？下面将罗列出可能的解决方案，并从设计理念层面对这些不同的方案进行分析。 <br />
<br />
解决方案一： <br />
<br />
简单的在Door的定义中增加一个alarm方法，如下： <br />
<br />
abstract class Door { <br />
abstract void open(); <br />
abstract void close()； <br />
abstract void alarm(); <br />
} <br />
<br />
<br />
或者 <br />
<br />
interface Door { <br />
void open(); <br />
void close(); <br />
void alarm(); <br />
} <br />
<br />
<br />
那么具有报警功能的AlarmDoor的定义方式如下： <br />
<br />
class AlarmDoor extends Door { <br />
void open() { &#8230; } <br />
void close() { &#8230; } <br />
void alarm() { &#8230; } <br />
} <br />
<br />
<br />
或者 <br />
<br />
class AlarmDoor implements Door ｛ <br />
void open() { &#8230; } <br />
void close() { &#8230; } <br />
void alarm() { &#8230; } <br />
｝ <br />
<br />
这种方法违反了面向对象设计中的一个核心原则ISP（Interface Segregation Priciple），在Door的定义中把Door概念本身固有的行为方法和另外一个概念"报警器"的行为方法混在了一起。这样引起的一个问题是那些仅仅依赖于Door这个概念的模块会因为"报警器"这个概念的改变（比如：修改alarm方法的参数）而改变，反之依然。 <br />
<br />
解决方案二： <br />
<br />
既然open、close和alarm属于两个不同的概念，根据ISP原则应该把它们分别定义在代表这两个概念的抽象类中。定义方式有：这两个概念都使用abstract class方式定义；两个概念都使用interface方式定义；一个概念使用abstract class方式定义，另一个概念使用interface方式定义。 <br />
<br />
显然，由于Java语言不支持多重继承，所以两个概念都使用abstract class方式定义是不可行的。后面两种方式都是可行的，但是对于它们的选择却反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理。我们一一来分析、说明。 <br />
<br />
如果两个概念都使用interface方式来定义，那么就反映出两个问题：1、我们可能没有理解清楚问题领域，AlarmDoor在概念本质上到底是Door还是报警器？2、如果我们对于问题领域的理解没有问题，比如：我们通过对于问题领域的分析发现AlarmDoor在概念本质上和Door是一致的，那么我们在实现时就没有能够正确的揭示我们的设计意图，因为在这两个概念的定义上（均使用interface方式定义）反映不出上述含义。 <br />
<br />
如果我们对于问题领域的理解是：AlarmDoor在概念本质上是Door，同时它有具有报警的功能。我们该如何来设计、实现来明确的反映出我们的意思呢？前面已经说过，abstract class在Java语言中表示一种继承关系，而继承关系在本质上是"is a"关系。所以对于Door这个概念，我们应该使用abstarct class方式来定义。另外，AlarmDoor又具有报警功能，说明它又能够完成报警概念中定义的行为，所以报警概念可以通过interface方式定义。如下所示： <br />
<br />
abstract class Door { <br />
abstract void open(); <br />
abstract void close()； <br />
} <br />
interface Alarm { <br />
void alarm(); <br />
} <br />
class AlarmDoor extends Door implements Alarm { <br />
void open() { &#8230; } <br />
void close() { &#8230; } <br />
void alarm() { &#8230; } <br />
} <br />
<br />
<br />
这种实现方式基本上能够明确的反映出我们对于问题领域的理解，正确的揭示我们的设计意图。其实abstract class表示的是"is a"关系，interface表示的是"like a"关系，大家在选择时可以作为一个依据，当然这是建立在对问题领域的理解上的，比如：如果我们认为AlarmDoor在概念本质上是报警器，同时又具有Door的功能，那么上述的定义方式就要反过来了。 <br />
<br />
转载人员-Nicholas<br />
</ca><!-- 导入 在此 参考资料--><!-- end 参考资料-->
<img src ="http://www.blogjava.net/obpm/aggbug/337451.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/obpm/" target="_blank">obpm</a> 2010-11-07 13:57 <a href="http://www.blogjava.net/obpm/archive/2010/11/07/337451.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Swing 可关闭的TabbedPane</title><link>http://www.blogjava.net/obpm/archive/2010/10/24/336027.html</link><dc:creator>obpm</dc:creator><author>obpm</author><pubDate>Sun, 24 Oct 2010 08:44:00 GMT</pubDate><guid>http://www.blogjava.net/obpm/archive/2010/10/24/336027.html</guid><wfw:comment>http://www.blogjava.net/obpm/comments/336027.html</wfw:comment><comments>http://www.blogjava.net/obpm/archive/2010/10/24/336027.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/obpm/comments/commentRss/336027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/obpm/services/trackbacks/336027.html</trackback:ping><description><![CDATA[可关闭的TabbedPane结构：<br />
<p><img src="http://www.blogjava.net/images/blogjava_net/obpm/c.png" width="596" height="149" alt="" /><br />
</p>
<p>
</p>
测试代码：
<p>
</p>
<div style="font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;cn.demo.test;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.awt.Component;<br />
<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;javax.swing.JFrame;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;javax.swing.JLabel;<br />
</span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;javax.swing.UIManager;<br />
<br />
</span><span style="color: #008000; ">/**</span><span style="color: #008000; "><br />
&nbsp;*&nbsp;Test<br />
&nbsp;*&nbsp;</span><span style="color: #808080; ">@author</span><span style="color: #008000; ">&nbsp;Tom<br />
&nbsp;*<br />
&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br />
</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;TestDemo&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;feel&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;UIManager.getSystemLookAndFeelClassName();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UIManager.setLookAndFeel(feel);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(Exception&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JFrame&nbsp;frame&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;JFrame();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setTitle(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">可关闭Tab测试</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setSize(</span><span style="color: #000000; ">300</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #000000; ">400</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setLocationRelativeTo(</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TabbedPane&nbsp;tabbedPane&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;TabbedPane();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabbedPane.setCloseButtonEnabled(</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabbedPane.addTab(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">测试一</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;JLabel(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">测试一</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabbedPane.addTab(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">测试二</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;JLabel(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">测试二</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabbedPane.addTab(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">测试三</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;JLabel(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">测试三</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabbedPane.addTab(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">测试四</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">,&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;JLabel(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">测试四</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tabbedPane.addTabbedPaneListener(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;TabbedPaneListener(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;allTabsRemoved()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&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;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; ">&nbsp;canTabClose(Tab&nbsp;tab,&nbsp;Component&nbsp;component)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;tabAdded(Tab&nbsp;tab,&nbsp;Component&nbsp;component,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;index)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&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;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;tabRemoved(Tab&nbsp;tab,&nbsp;Component&nbsp;component,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;index)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">close</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;tabSelected(Tab&nbsp;tab,&nbsp;Component&nbsp;component,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;index)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub</span><span style="color: #008000; "><br />
</span><span style="color: #000000; ">&nbsp;&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;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.add(tabbedPane);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setVisible(</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
}</span></div>
<p>&nbsp;测试效果：</p>
<p><img src="http://www.blogjava.net/images/blogjava_net/obpm/a.png" width="300" height="400" alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/images/blogjava_net/obpm/b.png" width="300" height="400" alt="" />&nbsp;</p>
<p>源码下载：<a title="TabbedPane.rar" href="/Files/obpm/TabbedPane.rar">TabbedPane.rar</a></p>
<p>发表人： Tom</p>
<p><br />
</p>
  <img src ="http://www.blogjava.net/obpm/aggbug/336027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/obpm/" target="_blank">obpm</a> 2010-10-24 16:44 <a href="http://www.blogjava.net/obpm/archive/2010/10/24/336027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库SQL分页收集</title><link>http://www.blogjava.net/obpm/archive/2010/10/10/334223.html</link><dc:creator>obpm</dc:creator><author>obpm</author><pubDate>Sun, 10 Oct 2010 13:32:00 GMT</pubDate><guid>http://www.blogjava.net/obpm/archive/2010/10/10/334223.html</guid><wfw:comment>http://www.blogjava.net/obpm/comments/334223.html</wfw:comment><comments>http://www.blogjava.net/obpm/archive/2010/10/10/334223.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/obpm/comments/commentRss/334223.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/obpm/services/trackbacks/334223.html</trackback:ping><description><![CDATA[<p>在数据库层使用SQL分页可以很大程度增加平台系统程序运行速度与效率。本人只是初入手半数据库半程序的开发，所以对数据库研究不深。于是要收集下列代码以作参考，同时也Post出来可以让需要的人参考一下，高手就请见笑了。说转载说不上，说原创也... 国庆期间在家家里的机子跑DB比较困难，做不了过多测试。不过语句或函数方面本人都仔细看过抄回来的SQL的网页里示例，感觉基本上大同小异，如果有错误查下做相应的修改或百度Google一下应该没什么大问题，也请多多包涵。当然，有机会就会对下列SQL做测试，然后会进行修正。至于每个数据库分页在这就不进行深究，只是列出个可用的方法。</p>
<p>##########<br />
# MySQL#<br />
##########</p>
<p>select * from tlk_buginfo limit startPos, pageSize</p>
<p>startPos: 定义当前页起始位置(不包括startPos)<br />
pageSize: 每页显示数据的条数</p>
<p>##########<br />
# MSSQL#(2005的row_number，暂无2000)<br />
##########</p>
<p>1、<br />
--返回第20-40行数据<br />
select top 20 * from (select row_number() over (order by EmployeeID) as RowNumber, * from HumanResources.Employee) TableNickname where RowNumber&gt;=20</p>
<p>2、<br />
--返回第20-40行数据<br />
select * from (select row_number() over (order by EmployeeID) as RowNumber, * from HumanResources.Employee) TableNickname where RowNumber between 20 and 40</p>
<p>3、<br />
--返回第20-40行数据<br />
with OrderedResults as<br />
(select *, ROW_NUMBER() OVER (order by EmployeeID) as RowNumber FROM HumanResources.Employee)<br />
select * from OrderedResults where RowNumber between 20 and 40</p>
<p>##########<br />
# Oracle#<br />
##########</p>
<p>①采用rownum关键字(三层嵌套)<br />
--返回第5-15行数据<br />
select * from (select row_.*, rownum num from (select * from tlk_buginfo) row_ where rownum&lt;=15) where num&gt;=5</p>
<p>②采用row_number解析函数进行分页(效率更高)<br />
--返回第5-15行数据<br />
select tab.* from (select t.*, row_number() over (order by lastmodified) as num from tlk_buginfo t) tab where num between 5 and 15</p>
<p>##########<br />
# DB2#<br />
##########</p>
<p>select * from (select *, rownumber() over(order by 排序字段 asc ) as rowid&nbsp; from 表名 )as a where a.rowid &gt;= startPage AND a.rowid &lt;endPage</p>
<p>##########<br />
# Hsqldb#<br />
##########</p>
<p>select LIMIT 0 10 表名</p>
<br />
收集资料:(allen) 
   <img src ="http://www.blogjava.net/obpm/aggbug/334223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/obpm/" target="_blank">obpm</a> 2010-10-10 21:32 <a href="http://www.blogjava.net/obpm/archive/2010/10/10/334223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm4.3API</title><link>http://www.blogjava.net/obpm/archive/2010/10/08/333933.html</link><dc:creator>obpm</dc:creator><author>obpm</author><pubDate>Thu, 07 Oct 2010 16:11:00 GMT</pubDate><guid>http://www.blogjava.net/obpm/archive/2010/10/08/333933.html</guid><wfw:comment>http://www.blogjava.net/obpm/comments/333933.html</wfw:comment><comments>http://www.blogjava.net/obpm/archive/2010/10/08/333933.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/obpm/comments/commentRss/333933.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/obpm/services/trackbacks/333933.html</trackback:ping><description><![CDATA[<div><a title="jbpm4.3API(chn)下载" href="/Files/obpm/jbpm4.3_API.rar" style="color: #002c99; text-decoration: none; ">jbpm4.3API(chn)下载</a></div>
<div>(denny)</div>
<img src ="http://www.blogjava.net/obpm/aggbug/333933.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/obpm/" target="_blank">obpm</a> 2010-10-08 00:11 <a href="http://www.blogjava.net/obpm/archive/2010/10/08/333933.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML 5 正在改变 Web？</title><link>http://www.blogjava.net/obpm/archive/2010/10/07/333919.html</link><dc:creator>obpm</dc:creator><author>obpm</author><pubDate>Thu, 07 Oct 2010 13:46:00 GMT</pubDate><guid>http://www.blogjava.net/obpm/archive/2010/10/07/333919.html</guid><wfw:comment>http://www.blogjava.net/obpm/comments/333919.html</wfw:comment><comments>http://www.blogjava.net/obpm/archive/2010/10/07/333919.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/obpm/comments/commentRss/333919.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/obpm/services/trackbacks/333919.html</trackback:ping><description><![CDATA[HTML5 是近十年来 Web 标准最巨大的飞跃。和以前的版本不同，HTML 5 并非仅仅用来表示 Web 内容，它的使命是将 Web
带入一个成熟的应用平台，在这个平台上，视频，音频，图象，动画，以及同电脑的交互都被标准化。尽管 HTML 5 的实现还有很长的路要走，但 HTML 5 正在改变
Web。<br />
HTML 最近的一次升级是1999年12月发布的 HTML
4.01。自那以后，发生了很多事。最初的浏览器战争已经结束，Netscape 灰飞烟灭，IE5 作为赢家后来又发展到 IE6, IE7到IE8。Mozilla
Firefox 从 Netscape 的死灰中诞生，并跃居第二位。苹果和 Google 各自推出自己的浏览器，而小家碧玉的 Opera
仍然嘤嘤嗡嗡地活着，并以推动 Web 标准为己命。我们甚至在手机和游戏机上有了真正的 Web 体验，感谢 Opera，iPhone 以及 Google
已经推出的 Android。<br />
然而这一切，仅仅让 Web 标准运动变得更加混乱，HTML 5 和其它标准被束之高阁，结果，HTML 5
一直以来都是以草案的面目示人。<br />
于是，一些公司联合起来，成立了一个叫做 Web Hypertext Application
Technology Working Group （Web 超文本应用技术工作组 - WHATWG） 的组织，他们将重新拣起 HTML 5。这个组织独立于
W3C，成员来自 Mozilla， KHTML/Webkit 项目组，Google，Apple，Opera 以及微软。尽管 HTML 5
草案不会在短期内获得认可，但 HTML 5 总算得以延续。<br />
HTML 5 将带来什么？以下是 HTML 5 草案中最激动人心的部分：<br />
全新的，更合理的 Tag，多媒体对象将不再全部绑定在 object 或 embed Tag
中，而是视频有视频的 Tag，音频有音频的 Tag。本地数据库。这个功能将内嵌一个本地的 SQL 数据库，以加速交互式搜索，缓存以及索引功能。同时，那些离线
Web 程序也将因此获益匪浅。不需要插件的富动画。Canvas 对象将给浏览器带来直接在上面绘制矢量图的能力，这意味着我们可以脱离 Flash 和
Silverlight，直接在浏览器中显示图形或动画。一些最新的浏览器，除了 IE，已经开始支持 Canvas。浏览器中的真正程序。将提供 API
实现浏览器内的编辑，拖放，以及各种图形用户界面的能力。内容修饰 Tag 将被剔除，而使用 CSS。理论上讲，HTML 5 是培育新 Web
标准的土壤，让各种设想在他的组织者之间分享，但 HTML 5 目前仍处于试验阶段。<br />
Mozilla 的技术副总裁 Mike Shaver 说，HTML 5 是一个被寄予厚望的概念，它既是
WHATWG 组织的实验田，又是 W3C 的标准之路。<br />
Shaver 认为，Mozilla 的兴趣和 WHATWG 实验相吻合，Mozilla 在 HTML 5
工作组中非常活跃，我们对一些早期的细则进行实验并将成熟的结果提交 W3C。<br />
在过去的几年，Mozilla 随着各种出现的新标准，推出多个富有前瞻性的项目，包括
Prism，一个用于离线运行 Web 程序的系统，以及 Weave，一个数据存储框架。<br />
Shaver 说，HTML 5 运动肇始于对 W3C 的不耐烦，Web 标准中的很多进展都因 W3C
将重点从 HTML 转移到 XML 而停滞不前。<br />
很多基于 XML 架构的新技术被设计出来替代 HTML，Shaver
说，这不是一条正确的道路，人们不应象黑瞎子掰玉米把样一边掰一边丢。<br />
HTML 5 的新实验在 Firefox 以及 基于 Webkit 的 Safari 和 Chrome
浏览器中逐渐得到强化，但仍有不少问题。<br />
Chrome 的开发者 Darin Fisher 说，Chrome
仍在襁褓中时，就不得不面临几个问题，尽管使用的是最新的 Webkit，HTML 5 的本地数据库功能在 Chrome 的初期版本中并没有实现。因为 Chrome
的沙箱机制和 Webkit 的数据库功能有冲突。<br />
而由于 Chrome 属于秘密开发，Chrome 的开发人员也不便参与 Webkit 的开发。<br />
我们要想保守 Chrome 的秘密，就无法参与 Webkit 社区。Fisher
说，我们很希望可以在某些方面给 Webkit 以帮助，我们拥有众多经验丰富的开发者，我们很想知道人们目前遇到的挑战并乐意提供帮助。<br />
随着 Chrome 的发布，Fisher 说他的团队成员有时会和 Webkit
的人一起吃饭，有些人私下里还成了好朋友。Fisher 称，他们迫切地想同其他 Webkit 开发组一起工作解决离线数据库的问题。<br />
Chrome 里面还包含Google 的开源 Gears 技术，用来实现与 HTML 5 类似的离线功能。<br />
Gears 可以看作已有 API 的替代品，Fisher 说，HTML 5
对新浏览器来说是非常好的东西，但绝大多数用户还使用旧浏览器。Gears 可以让那些旧浏览器也获得这样的 API，我们正在为 HTML 5 版 API 提供兼容。<br />
Gears 兼容性非常好，它正成为将 HTML 5 带向人们桌面的另外一条途径。<br />
目前，绝大多数工作由 Apple，Mozilla, Opera, Google 以及 Trolltech
展开。微软在干什么？IE 因其对 Web 标准的迟钝而闻名，更不要说 HTML 5。但 IE8 可能会做出改变。<br />
微软 IE 平台与 WHAT 工作组主席 Chris Wilson
在邮件中称，我们希望我们现在开始的工作可以在 HTML 工作组创建一套测试系统。Wilson 说，IE 开发组仍然对 HTML 5
的一些提议感到担忧。我觉得工作组的所有成员都会承认我们还有很多事要做。<br />
目前处于 Beta 版的 IE9，已经包含 HTML 5
的诸多新功能。它拥有一个跨文档消息系统，本地存储，以及一些离线事件来检测网络的中断。但还有些功能还未提上议程，如 Canvas。<br />
HTML 5
非常庞大，仍处在开发阶段，我认为浏览器厂商应当尽快达成一致，而每个浏览器的具体实现时间可以自己选择。Web 开发者和浏览器厂商会同意 Wilson
的下面这句话，这确切无疑是一个激动人心的时刻，我们希望看到 Web 成为新的应用平台。
<div>HTML5写的例子(IE9或google浏览器才有效果)：<br />
&nbsp;
<div><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><strong style="word-wrap: break-word; line-height: 24px; ">Google Gravity</strong></span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><br style="word-wrap: break-word; line-height: 24px; " />
</span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><a href="http://mrdoob.com/projects/chromeexperiments/google_gravity/" target="_blank" style="word-wrap: break-word; text-decoration: none; color: #0066cc; line-height: 24px; ">http://mrdoob.com/projects/chromeexperiments/google_gravity/<img src="http://www.blogjava.net/images/blogjava_net/obpm/google.jpg" border="0" alt="" /></a></span></div>
<div><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><strong style="word-wrap: break-word; line-height: 24px; ">BallDropping</strong></span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><br style="word-wrap: break-word; line-height: 24px; " />
</span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><a href="http://balldroppings.com/js/" target="_blank" style="word-wrap: break-word; text-decoration: none; color: #0066cc; line-height: 24px; ">http://balldroppings.com/js/</a></span>
</div>
<div><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><strong style="word-wrap: break-word; line-height: 24px; ">Animated Harmonograph</strong></span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><br style="word-wrap: break-word; line-height: 24px; " />
</span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><a href="http://hernan.amiune.com/labs/harmonograph/animated-harmonograph.html" target="_blank" style="word-wrap: break-word; text-decoration: none; color: #0066cc; line-height: 24px; ">http://hernan.amiune.com/labs/harmonograph/animated-harmonograph.html</a></span></div>
<div><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><strong style="word-wrap: break-word; line-height: 24px; ">Canopy</strong></span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><br style="word-wrap: break-word; line-height: 24px; " />
</span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><a href="http://onecm.com/projects/canopy/" target="_blank" style="word-wrap: break-word; text-decoration: underline; color: #0066cc; line-height: 24px; ">http://onecm.com/projects/canopy/</a></span>
</div>
<div><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><strong style="word-wrap: break-word; line-height: 24px; ">Ball Pool</strong></span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><br style="word-wrap: break-word; line-height: 24px; " />
</span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><a href="http://mrdoob.com/projects/chromeexperiments/ball_pool/" target="_blank" style="word-wrap: break-word; text-decoration: none; color: #0066cc; line-height: 24px; ">http://mrdoob.com/projects/chromeexperiments/ball_pool/</a></span></div>
<div><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><strong style="word-wrap: break-word; line-height: 24px; ">Browser Ball</strong></span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><br style="word-wrap: break-word; line-height: 24px; " />
</span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><a href="http://experiments.instrum3nt.com/markmahoney/ball/parent.html" target="_blank" style="word-wrap: break-word; text-decoration: none; color: #0066cc; line-height: 24px; ">http://experiments.instrum3nt.com/markmahoney/ball/parent.html</a></span></div>
<div><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><strong style="word-wrap: break-word; line-height: 24px; ">Wavy Scrollbars</strong></span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><br style="word-wrap: break-word; line-height: 24px; " />
</span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><a href="http://the389.com/experiment/" target="_blank" style="word-wrap: break-word; text-decoration: none; color: #0066cc; line-height: 24px; ">http://the389.com/experiment/</a></span></div>
<div><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><strong style="word-wrap: break-word; line-height: 24px; ">Twitch</strong></span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><br style="word-wrap: break-word; line-height: 24px; " />
</span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><a href="http://reas.com/twitch/window0.html" target="_blank" style="word-wrap: break-word; text-decoration: none; color: #0066cc; line-height: 24px; ">http://reas.com/twitch/window0.html</a></span></div>
<div><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><strong style="word-wrap: break-word; line-height: 24px; ">Colorscube</strong></span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><br style="word-wrap: break-word; line-height: 24px; " />
</span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><a href="http://www.canvasdemos.com/2009/04/03/colorscube/" target="_blank" style="word-wrap: break-word; text-decoration: none; color: #0066cc; line-height: 24px; ">http://www.canvasdemos.com/2009/04/03/colorscube/</a></span></div>
<div><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><strong style="word-wrap: break-word; line-height: 24px; ">InterNetris</strong></span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><br style="word-wrap: break-word; line-height: 24px; " />
</span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><a href="http://internetris.net/" target="_blank" style="word-wrap: break-word; text-decoration: none; color: #0066cc; line-height: 24px; ">http://internetris.net/</a></span></div>
<div><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><strong style="word-wrap: break-word; line-height: 24px; ">CanvasPaint</strong></span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><br style="word-wrap: break-word; line-height: 24px; " />
</span><span style="border-collapse: collapse; font-family: Verdana, Helvetica, Arial, sans-serif; font-size: 14px; line-height: 24px; "><a href="http://canvaspaint.org/" target="_blank" style="word-wrap: break-word; text-decoration: none; color: #0066cc; line-height: 24px; ">http://canvaspaint.org/</a></span></div>
<div>HTML5学习资料：</div>
<div>http://www.chinabyte.com/bang/html5/</div>
<div>收集资料:(denny)
</div>
</div>
<img src ="http://www.blogjava.net/obpm/aggbug/333919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/obpm/" target="_blank">obpm</a> 2010-10-07 21:46 <a href="http://www.blogjava.net/obpm/archive/2010/10/07/333919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBPM4.3数据表结构说明（转载）</title><link>http://www.blogjava.net/obpm/archive/2010/09/16/332229.html</link><dc:creator>obpm</dc:creator><author>obpm</author><pubDate>Thu, 16 Sep 2010 11:51:00 GMT</pubDate><guid>http://www.blogjava.net/obpm/archive/2010/09/16/332229.html</guid><wfw:comment>http://www.blogjava.net/obpm/comments/332229.html</wfw:comment><comments>http://www.blogjava.net/obpm/archive/2010/09/16/332229.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/obpm/comments/commentRss/332229.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/obpm/services/trackbacks/332229.html</trackback:ping><description><![CDATA[首先，在jbpm4中，流程定义相关的部署信息就存在<span style="color: red">JBPM4_DEPLOYMENT</span>、<span style="color: red">JBPM4_DEPLOYPROP</span>及<span style="color: red">JBPM4_LOB </span>(存放当发布一个png和xml文件后的流程定义后的记录)。中。 <br />
<br />
<span style="color: red">JBPM4_HIST_PROCINST</span>、<span style="color: red">JBPM4_HIST_ACTINST</span>两张表中，分别存放的是process Instance、Activity Instance的历史记录，Activity Instance是指流程定义中各个步骤：task descition等存放Process Instance、Activity Instance历史记录的表有了，那他们的当前记录存在什么地方呢？这就需要弄清楚jBPM的另外几个概念。一般而言，在jBPM中，&#8220;a process instance is the root of a tree of executions&#8221;。因此，当一个流程实例Split出两个并行步骤的时候，在<span style="color: red">JBPM4_EXECUTION</span>表中将有三笔相关记录，一笔是代表流程实例的Root Execution，另外两笔是关于上述两个并行步骤的Child Execution。 <br />
<br />
此外，在jbpm中，Activity的种类是很丰富的，可以是Control Flow Activities，如sub-process，decision等，也可以是Automatic Activity，如java、script、sql等，其中需要人来参与完成的Activity被称为Task，待办任务放在<span style="color: red">JBPM4_TASK</span>表中，而历史任务放在<span style="color: red">JBPM4_HIST_TASK</span>表中。 <br />
<br />
对一个Task而言，它可能会有多个Participation(swim lane 同样会有多个Participation)，Participation的种类有Candidate、client、owner、Replaced Assignee和viewer，而具体的Participation既可以是单一用户，也可以是用户组，Participation的信息存放在<span style="color: red">JBPM4_PARTICIPATION</span>中。 <br />
<br />
Swim Lane是一种Runtime Process Role，通过Swim Lane，多个Task可以一次分配到同一Actor身上，存放这些信息是表<span style="color: red">JBPM4_PARTICIPATION</span>。 <br />
<br />
<span style="color: red">JBPM4_ID_GROUP</span>、<span style="color: red">JBPM4_ID_MEMBERSHIP</span>、<span style="color: red">JBPM4_ID_USER</span>这是基本的权限控制，建议关于用户认证方面还是自己开发一套，这个功能太简单了，难以满足需求。 <br />
<br />
<span style="color: red">JBPM4_JOB</span>存放的是Timer的定义。 <br />
<br />
<span style="color: red">JBPM4_PROPERTY</span>这是jbpm引擎参数表。 <br />
<br />
<span style="color: red">JBPM4_VAR</span>表存放流程临时变量，当流程实例结束后，表中内容清除。 <br />
<br />
<span style="color: red">JBPM4_HIST_VAR</span>表存放历史临时变量，但是jbpm4好像还没有对这张表进行利用。 <br />
<br />
<span style="color: red">JBPM4_HIST_DETAIL</span>表保存变量变更记录。 <br />
<br />
<br />
<br />
了解jbpm4.3以上这18张表后，我们应该在流程运行中，详细观察jbpm是如何对这些表进行操作，以及进行什么样的操作的。 <br />
<br />
发布一个流程定义后： <br />
<br />
<span style="color: red">JBPM4_DEPLOYMENT</span>新增一条记录 <br />
<br />
<span style="color: red">JBPM4_DEPLOYPROP</span>新增三条记录 <br />
<br />
<span style="color: red">JBPM4_LOB</span>新增两条记录 <br />
<br />
<br />
<br />
开始一个流程startProcessInstanceByKey后： <br />
<br />
<span style="color: red">JBPM4_EXECUTION</span>新增一条记录 <br />
<br />
<span style="color: red">JBPM4_TASK</span>新增一条记录 <br />
<br />
<span style="color: red">JBPM4_HIST_PROCINST</span>、<span style="color: red">JBPM4_HIST_ACTINST</span>分别新增一条记录 <br />
<br />
<span style="color: red">JBPM4_HIST_TASK</span>新增一条记录 <br />
<br />
<br />
<br />
当执行taskService.setVariables(task.getId(), map);时，<span style="color: red">JBPM4_VARIABLES</span>中添加变量记录<br />
&nbsp;<br />
转载人员：Nicholas
<img src ="http://www.blogjava.net/obpm/aggbug/332229.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/obpm/" target="_blank">obpm</a> 2010-09-16 19:51 <a href="http://www.blogjava.net/obpm/archive/2010/09/16/332229.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于RBAC的权限设计模型</title><link>http://www.blogjava.net/obpm/archive/2010/09/14/331967.html</link><dc:creator>obpm</dc:creator><author>obpm</author><pubDate>Tue, 14 Sep 2010 05:30:00 GMT</pubDate><guid>http://www.blogjava.net/obpm/archive/2010/09/14/331967.html</guid><wfw:comment>http://www.blogjava.net/obpm/comments/331967.html</wfw:comment><comments>http://www.blogjava.net/obpm/archive/2010/09/14/331967.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/obpm/comments/commentRss/331967.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/obpm/services/trackbacks/331967.html</trackback:ping><description><![CDATA[<p align="center"><strong>权限分析文档</strong> <p>基于RBAC的权限设计模型： <p><strong>1 </strong><strong>RBAC </strong><strong>介绍</strong> <p>RBAC 模型作为目前最为广泛接受的权限模型。 <p>NIST （The National Institute of Standards and Technology，美国国家标准与技术研究院）标准RBAC模型由4个部件模型组成，这4个部件模型分别是基本模型RBAC0（Core RBAC）、角色分级模型RBAC1（Hierarchal RBAC）、角色限制模型RBAC2（Constraint RBAC）和统一模型RBAC3（Combines RBAC）<sup>[1]</sup>。RBAC0模型如图1所示。 <p><img border="0" alt="clip_image001.jpg" src="http://www.blogjava.net/images/blogjava_net/anwenhao/clip_image001.jpg" width="482" height="144"><br>图表 1 RBAC 0 模型 <p>l <strong>RBAC0 </strong><strong>定义了能构成一个RBAC控制系统的最小的元素集合</strong> <p>在RBAC之中,包含用户users(USERS)、角色roles(ROLES)、目标objects(OBS)、操作operations(OPS)、许可权permissions(PRMS)五个基本数据元素，权限被赋予角色,而不是用户，当一个角色被指定给一个用户时，此用户就拥有了该角色所包含的权限。会话sessions是用户与激活的角色集合之间的映射。RBAC0与传统访问控制的差别在于增加一层间接性带来了灵活性，RBAC1、RBAC2、RBAC3都是先后在RBAC0上的扩展。 <p>l <strong>RBAC1 </strong><strong>引入角色间的继承关系</strong> <p>角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系，允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构。 <p>l <strong>RBAC2 </strong><strong>模型中添加了责任分离关系</strong> <p>RBAC2 的约束规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。责任分离包括静态责任分离和动态责任分离。约束与用户-角色-权限关系一起决定了RBAC2模型中用户的访问许可。 <p>l <strong>RBAC3 </strong><strong>包含了RBAC1和RBAC2</strong> <p>既提供了角色间的继承关系，又提供了责任分离关系。 <p>建立角色定义表。定出当前系统中角色。 <p>因为有继承的问题，所以角色体现出的是一个树形结构。 <p><img border="0" alt="test.bmp" src="http://www.blogjava.net/images/blogjava_net/anwenhao/%E6%9C%AA%E5%91%BD%E5%90%8D1.bmp" width="603" height="407"> <p><strong>2 </strong><strong>权限设计：</strong> <p>配置资源以及资源的操作 ： 这里资源可以定义为一个通用的资源模型。提供通用的资源统一接口。 <p>数据库 ER 图： <p><img border="0" alt="clip_image002.gif" src="http://www.blogjava.net/images/blogjava_net/anwenhao/clip_image002.gif" width="553" height="322"> <p>关系图： <p><img border="0" alt="clip_image003.gif" src="http://www.blogjava.net/images/blogjava_net/anwenhao/clip_image003.gif" width="553" height="419"> <p><img border="0" alt="未命名.bmp" src="http://www.blogjava.net/images/blogjava_net/anwenhao/%E6%9C%AA%E5%91%BD%E5%90%8D.bmp" width="603" height="739"> <p><strong>3 </strong><strong>分析：</strong> <p>根据以上的类关系图和ER图可以看出。整个权限可以抽象为五个对象组成。 <p><strong>OrgBean : </strong><strong>用于描述org模型。</strong> <p><strong>Role </strong><strong>： 用于描述角色。</strong> <p><strong>Permission </strong><strong>： 用于描述权限。</strong> <p><strong>Resource </strong><strong>： 用于描述资源。</strong> <p><strong>Operation </strong><strong>： 用于描述操作。</strong> <p><strong></strong> <p><strong>其中Permission中有Resource , Operation 的聚合，资源和操作组成权限。</strong> <p><strong>Role </strong><strong>和 Permission 都有自包含。因为设计到权限的继承。</strong> <p><strong>资源Resource 也可能出现一颗树形结构，那资源也要有自包含。</strong> <p><strong></strong> <p><strong>思想 </strong><strong>:</strong> <p>权限系统的核心由以下三部分构成： 1. 创造权限， 2. 分配权限， 3. 使用权限，然后，系统各部分的主要参与者对照如下： 1. 创造权限 -Creator 创造， 2. 分配权限 - Administrator 分配， 3. 使用权限 - User ： <p>1. Creator 创造 Privilege ， Creator 在设计和实现系统时会划分，一个子系统或称为模块，应该有哪些权限。这里完成的是 Privilege 与Resource 的对象声明，并没有真正将 Privilege 与具体 Resource 实例联系在一起，形成 Operator 。 <p>2. Administrator 指定 Privilege 与 Resource Instance 的关联 。在这一步， 权限真正与资源实例联系到了一起， 产生了 Operator （Privilege Instance ）。 Administrator 利用 Operator 这个基本元素，来创造他理想中的权限模型。如，创建角色，创建用户组，给用户组分配用户，将用户组与角色关联等等 ... 这些操作都是由 Administrator 来完成的。 <p>3. User 使用 Administrator 分配给的权限去使用各个子系统。 Administrator 是用户，在他的心目中有一个比较适合他管理和维护的权限模型。于是，程序员只要回答一个问题，就是什么权限可以访问什么资源，也就是前面说的 Operator 。程序员提供 Operator 就意味着给系统穿上了盔甲。 Administrator 就可以按照他的意愿来建立他所希望的权限框架 可以自行增加，删除，管理 Resource 和 Privilege 之间关系。可以自行设定用户 User 和角色 Role 的对应关系。 ( 如果将 Creator 看作是 Basic 的发明者， Administrator 就是 Basic 的使用者，他可以做一些脚本式的编程 ) Operator 是这个系统中最关键的部分，它是一个纽带，一个系在 Programmer ， Administrator ， User 之间的纽带。 <p><strong></strong> <p><strong>4 </strong><strong>权限API</strong> <p><strong> getPermissionByOrgGuid(String orgGuid )</strong> <p>通过传入一个org的Guid ， 拿到当前这个org对象都具有那些访问权限。 <p><strong> getSourcePermissionByOrgGuid(String orgGuid , String resouceGuid)</strong> <p>通过传入一个org的Guid 和 一个资源的Guid ， 返回改Org对当前这个资源的访问权限。 <p><strong>getPermissionByResourceGuid(String resource)</strong> <p>通过传入一个资源的Guid ， 得到当前资源下都有那些权限定义。 <p><strong>havingHeritPermission(String orgGuid , String resouceGuid) : Boolean</strong> <p>传入一个orgGuid， 资源GUID ，查看改OrgGuid下对资源是否有向下继承的权限。这里继承是资源的继承。即对父栏目有权限，可以继承下去对父栏目下的子栏目同样有权限。 <p><strong>havingPermission(String orgGuid , String resourceGuid) : Boolean</strong> <p>判断某Org对某一资源是否用权限。 <p>以上是粗粒度的权限API 。 以下为细粒度的权限： <p><strong>getOperationByPermission(String permissionGuid)</strong> <p>通过permission 的Guid 得到该permission 的所有有效操作。 <p><strong>getOperationByGuid(String permissionGuid , String resourceGuid)</strong> <p>通过permision的Guid ， 资源的Guid 得到该资源下所有的有效操作。 <p><strong>screeningOpreationByGuid (String permissionGuid , String resourceGuid , String orgGuid)</strong> <p>通过permission ， resource ， org的Guid 得到改Org对这一资源的有效操作。 <p><strong>hasOperation(String operationGuid) : boolean</strong> <p>通过传入的operationGuid 返回是否具有操作权限。 <p><strong>5 </strong><strong>权限的实现：</strong> <p>1 ．表单式认证，这是常用的，但用户到达一个不被授权访问的资源时， Web 容器就发 <p>出一个 html 页面，要求输入用户名和密码。 <p>2 ．用 Filter 防止用户访问一些未被授权的资源， Filter 会截取所有 Request/Response ， <p>然后放置一个验证通过的标识在用户的 Session 中，然后 Filter 每次依靠这个标识来决定是否放行 Response 。 <p>这个模式分为： <p>Gatekeeper ：采取 Filter 或统一 Servlet 的方式。 <p>Authenticator ： 在 Web 中使用 JAAS 自己来实现。 <p>Filter 拦截只是拦截该用户是否有访问这个页面，或这一资源的权限。真正做到显示后拦截是在应用程序内部去做。 <p>做显示拦截提供API ， 标签这两种方式 <p>&nbsp; <p>转载人员：Happy <p><b>原文地址</b> <a href="http://blog.csdn.net/huanghanzzz2006/archive/2006/12/04/1429666.aspx">http://blog.csdn.net/huanghanzzz2006/archive/2006/12/04/1429666.aspx</a> <img src ="http://www.blogjava.net/obpm/aggbug/331967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/obpm/" target="_blank">obpm</a> 2010-09-14 13:30 <a href="http://www.blogjava.net/obpm/archive/2010/09/14/331967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>flex4中文帮助文档下载</title><link>http://www.blogjava.net/obpm/archive/2010/09/03/330678.html</link><dc:creator>obpm</dc:creator><author>obpm</author><pubDate>Fri, 03 Sep 2010 00:50:00 GMT</pubDate><guid>http://www.blogjava.net/obpm/archive/2010/09/03/330678.html</guid><wfw:comment>http://www.blogjava.net/obpm/comments/330678.html</wfw:comment><comments>http://www.blogjava.net/obpm/archive/2010/09/03/330678.html#Feedback</comments><slash:comments>104</slash:comments><wfw:commentRss>http://www.blogjava.net/obpm/comments/commentRss/330678.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/obpm/services/trackbacks/330678.html</trackback:ping><description><![CDATA[<p>flex4帮助文档大小有34M(网页版)，上传不了。需要该文档的，请留下你的邮箱地址。<br />
115共享地址：<br />
http://u.115.com/file/f8c22d4e48<br />
flex4api.zip&nbsp;&nbsp; 提取码：<span class="un-select">f8c22d4e48</span><br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/obpm/676777.png" border="0" /><br />
<br />
原创人员：denny<br />
</p>
<img src ="http://www.blogjava.net/obpm/aggbug/330678.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/obpm/" target="_blank">obpm</a> 2010-09-03 08:50 <a href="http://www.blogjava.net/obpm/archive/2010/09/03/330678.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>flex图片剪切示例--预览、保存到本地、保存到服务器(附源码)</title><link>http://www.blogjava.net/obpm/archive/2010/09/01/330501.html</link><dc:creator>obpm</dc:creator><author>obpm</author><pubDate>Wed, 01 Sep 2010 01:55:00 GMT</pubDate><guid>http://www.blogjava.net/obpm/archive/2010/09/01/330501.html</guid><wfw:comment>http://www.blogjava.net/obpm/comments/330501.html</wfw:comment><comments>http://www.blogjava.net/obpm/archive/2010/09/01/330501.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/obpm/comments/commentRss/330501.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/obpm/services/trackbacks/330501.html</trackback:ping><description><![CDATA[图片剪切功能：<br />
<br />
效果图：<br />
<img style="width: 325px; height: 261px" height="261" alt="" src="http://www.blogjava.net/images/blogjava_net/obpm/3sfs.png" width="325" border="0" /><br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/obpm/2sfsf.png" border="0" /><br />
<br />
<br />
<br />
flex代码:<br />
<p>&nbsp;</p>
<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"><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="utf-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mx:Application&nbsp;</span><span style="color: #ff0000">xmlns:mx</span><span style="color: #0000ff">="http://www.adobe.com/2006/mxml"</span><span style="color: #ff0000">&nbsp;layout</span><span style="color: #0000ff">="absolute"</span><span style="color: #ff0000">&nbsp;initialize</span><span style="color: #0000ff">="init()"</span><span style="color: #ff0000">&nbsp;xmlns:local</span><span style="color: #0000ff">="astion.*"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mx:Script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;![CDATA[</span><span style="color: #808080"><br />
&nbsp;&nbsp;&nbsp;import&nbsp;mx.controls.Image;<br />
&nbsp;&nbsp;&nbsp;import&nbsp;mx.graphics.ImageSnapshot;<br />
&nbsp;&nbsp;&nbsp;import&nbsp;flash.net.FileReference;<br />
&nbsp;&nbsp;&nbsp;import&nbsp;mx.graphics.codec.JPEGEncoder;<br />
&nbsp;&nbsp;&nbsp;import&nbsp;mx.managers.PopUpManager;<br />
&nbsp;&nbsp;&nbsp;import&nbsp;mx.containers.TitleWindow;<br />
&nbsp;&nbsp;&nbsp;import&nbsp;mx.controls.Alert;<br />
&nbsp;&nbsp;&nbsp;import&nbsp;mx.events.CloseEvent;<br />
&nbsp;&nbsp;&nbsp;import&nbsp;mx.core.IFlexDisplayObject;<br />
&nbsp;&nbsp;&nbsp;import&nbsp;mx.utils.*;<br />
&nbsp;&nbsp;&nbsp;import&nbsp;mx.core.Application;<br />
&nbsp;&nbsp;&nbsp;import&nbsp;astion.Dot;<br />
&nbsp;&nbsp;&nbsp;import&nbsp;astion.ScaleBox;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;const&nbsp;LINE_WIDTH:Number&nbsp;=&nbsp;1;//缩放边框宽度<br />
&nbsp;&nbsp;&nbsp;private&nbsp;var&nbsp;file:FileReference;<br />
&nbsp;&nbsp;&nbsp;public&nbsp;var&nbsp;IMAGE_URL:String="http://localhost:8080/cutPicuter/aa/aa.jpg";<br />
&nbsp;&nbsp;&nbsp;private&nbsp;var&nbsp;loader:Loader;<br />
&nbsp;&nbsp;&nbsp;private&nbsp;var&nbsp;bmp:Bitmap;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;var&nbsp;stream:URLStream;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;var&nbsp;realPath:String="D:\myWorkSpace\cutPicuter\WebRoot\aa\aa.jpg";<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;//初始化数据<br />
&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;init():void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;this.loader&nbsp;=&nbsp;new&nbsp;Loader();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.stream&nbsp;=&nbsp;new&nbsp;URLStream();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.loader.contentLoaderInfo.addEventListener(Event.COMPLETE,this.onComplete);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.loader.load(new&nbsp;URLRequest(encodeURI(this.IMAGE_URL)));//解决中文乱码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.stream.load(new&nbsp;URLRequest(encodeURI(this.IMAGE_URL)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.stream.addEventListener(Event.COMPLETE,this.onLoaded);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;onLoaded(e:Event):void<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;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;bytearray:ByteArray&nbsp;=&nbsp;new&nbsp;ByteArray();&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.stream.readBytes(bytearray);<br />
&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(this.stream.connected)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.stream.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.loader.loadBytes(bytearray);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;onComplete(e:Event):void<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&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;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.bmp&nbsp;=&nbsp;this.loader.content&nbsp;as&nbsp;Bitmap;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;showImage:Image=&nbsp;new&nbsp;Image();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;showImage.source=this.loader.content;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas.addChild(showImage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas.setChildIndex(box,1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;canvas.setChildIndex(showImage,0);<br />
&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(e:Error)<br />
&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&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;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;//截图，显示缩放选择框<br />
&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;doCapture():void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;box.x&nbsp;=&nbsp;100;<br />
&nbsp;&nbsp;&nbsp;&nbsp;box.y&nbsp;=&nbsp;100;<br />
&nbsp;&nbsp;&nbsp;&nbsp;box.visible&nbsp;=&nbsp;true;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;//获取缩放选择框内的图像<br />
&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;getImg():BitmapData{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//截取整个区域<br />
&nbsp;&nbsp;&nbsp;&nbsp;box.scaleEnable&nbsp;=&nbsp;false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;bmp:BitmapData&nbsp;=&nbsp;ImageSnapshot.captureBitmapData(canvas);<br />
&nbsp;&nbsp;&nbsp;&nbsp;box.scaleEnable&nbsp;=&nbsp;true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;//矩形为要截取区域&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;re:Rectangle&nbsp;=&nbsp;new&nbsp;Rectangle(box.x+LINE_WIDTH,box.y+LINE_WIDTH,box.boxWidth-LINE_WIDTH,box.boxHeight-LINE_WIDTH);&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;bytearray:ByteArray&nbsp;=&nbsp;new&nbsp;ByteArray();&nbsp;&nbsp;&nbsp;<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;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytearray&nbsp;=&nbsp;bmp.getPixels(re);&nbsp;<br />
&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;imgBD:BitmapData&nbsp;=&nbsp;new&nbsp;BitmapData(box.boxWidth-LINE_WIDTH,box.boxHeight-LINE_WIDTH);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//当前的bytearray.position为最大长度，要设为从0开始读取&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bytearray.position=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;fillre:Rectangle&nbsp;=&nbsp;new&nbsp;Rectangle(0,0,box.boxWidth-LINE_WIDTH,box.boxHeight-LINE_WIDTH);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将截取出的像素集合存在新的bitmapdata里，大小和截取区域一样<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imgBD.setPixels(fillre,bytearray);<br />
&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;imgBD;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;//预览图片<br />
&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;doScan():void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;t:TitleWindow&nbsp;=&nbsp;new&nbsp;TitleWindow();<br />
&nbsp;&nbsp;&nbsp;&nbsp;t.showCloseButton=true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;t.addEventListener(CloseEvent.CLOSE,closeWindow);<br />
&nbsp;&nbsp;&nbsp;&nbsp;t.width&nbsp;=&nbsp;box.boxWidth+t.getStyle("borderThickness");<br />
&nbsp;&nbsp;&nbsp;&nbsp;t.height&nbsp;=box.boxHeight+t.getStyle("borderThickness")+t.getStyle("headerHeight");<br />
&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;img:Image&nbsp;=&nbsp;new&nbsp;Image();<br />
&nbsp;&nbsp;&nbsp;&nbsp;img.width&nbsp;=&nbsp;box.boxWidth;<br />
&nbsp;&nbsp;&nbsp;&nbsp;img.height&nbsp;=&nbsp;box.boxHeight;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;img.source&nbsp;=&nbsp;new&nbsp;Bitmap(getImg());<br />
&nbsp;&nbsp;&nbsp;&nbsp;t.addChild(img);<br />
&nbsp;&nbsp;&nbsp;&nbsp;PopUpManager.addPopUp(t,this,true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;PopUpManager.centerPopUp(t);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;closeWindow(e:CloseEvent):void{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;t:TitleWindow&nbsp;=&nbsp;e.currentTarget&nbsp;as&nbsp;TitleWindow;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PopUpManager.removePopUp(t);&nbsp;&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;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保存图片到本地<br />
&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;downloadPicture():void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;file=new&nbsp;FileReference();<br />
&nbsp;&nbsp;&nbsp;&nbsp;file.addEventListener(Event.COMPLETE,downloadComplete);<br />
&nbsp;&nbsp;&nbsp;&nbsp;file.save(new&nbsp;JPEGEncoder(80).encode(getImg()),"default.jpg");<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;downloadComplete(event:Event):void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Alert.show("成功保存图片到本地！","提示");<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;//保存图片到服务器即覆盖原来的图片<br />
&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;save():void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Alert.show("是否保存剪切图片？","提示",3,&nbsp;this,&nbsp;function(event:CloseEvent):void&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(event.detail==Alert.YES){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;request:URLRequest&nbsp;=&nbsp;new&nbsp;URLRequest("http://localhost:8080/cutPicuter/servlet/FileManagerSaveFileServlet?realPath="+encodeURIComponent(StringUtil.trim(realPath)));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.method=URLRequestMethod.POST;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.contentType&nbsp;=&nbsp;"application/octet-stream";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.data&nbsp;=&nbsp;new&nbsp;JPEGEncoder(80).encode(getImg());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;loader:URLLoader&nbsp;=&nbsp;new&nbsp;URLLoader();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader.load(request);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loader.addEventListener(Event.COMPLETE,saveResult);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}});<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;private&nbsp;function&nbsp;saveResult(event:Event):void{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Application.application.reLoadFolderFiles(realPath.substr(0,realPath.lastIndexOf("\\")));<br />
&nbsp;&nbsp;&nbsp;&nbsp;Alert.show("保存剪切图片成功","提示");<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">]]&gt;</span><span style="color: #000000"><br />
&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">mx:Script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mx:HBox&nbsp;</span><span style="color: #ff0000">x</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;y</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mx:LinkButton&nbsp;</span><span style="color: #ff0000">label</span><span style="color: #0000ff">="剪裁"</span><span style="color: #ff0000">&nbsp;click</span><span style="color: #0000ff">="doCapture();"</span><span style="color: #ff0000">&nbsp;icon</span><span style="color: #0000ff">="@Embed('assets/cut.png')"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mx:LinkButton&nbsp;</span><span style="color: #ff0000">label</span><span style="color: #0000ff">="预览"</span><span style="color: #ff0000">&nbsp;click</span><span style="color: #0000ff">="doScan();"</span><span style="color: #ff0000">&nbsp;icon</span><span style="color: #0000ff">="@Embed('assets/ok.png')"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mx:VRule&nbsp;</span><span style="color: #ff0000">height</span><span style="color: #0000ff">="22"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mx:LinkButton&nbsp;</span><span style="color: #ff0000">label</span><span style="color: #0000ff">="保存"</span><span style="color: #ff0000">&nbsp;&nbsp;click</span><span style="color: #0000ff">="save()"</span><span style="color: #ff0000">&nbsp;&nbsp;icon</span><span style="color: #0000ff">="@Embed('assets/save.png')"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mx:LinkButton&nbsp;</span><span style="color: #ff0000">label</span><span style="color: #0000ff">="另存为"</span><span style="color: #ff0000">&nbsp;click</span><span style="color: #0000ff">="downloadPicture();"</span><span style="color: #ff0000">&nbsp;icon</span><span style="color: #0000ff">="@Embed('assets/saveAs.png')"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">mx:HBox</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">mx:Canvas&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="canvas"</span><span style="color: #ff0000">&nbsp;y</span><span style="color: #0000ff">="23"</span><span style="color: #ff0000">&nbsp;x</span><span style="color: #0000ff">="1"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">local:ScaleBox&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="box"</span><span style="color: #ff0000">&nbsp;visible</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;y</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;x</span><span style="color: #0000ff">="0"</span><span style="color: #ff0000">&nbsp;width</span><span style="color: #0000ff">="100"</span><span style="color: #ff0000">&nbsp;height</span><span style="color: #0000ff">="100"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">mx:Canvas</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">mx:Application</span><span style="color: #0000ff">&gt;</span></div>
<p><br />
<br />
java代码：<br />
</p>
<p>&nbsp;</p>
<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"><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com;<br />
<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.DataOutputStream;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.File;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.FileOutputStream;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.IOException;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.io.InputStream;<br />
<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.ServletException;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServlet;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServletRequest;<br />
</span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;javax.servlet.http.HttpServletResponse;<br />
<br />
</span><span style="color: #008000">/**</span><span style="color: #008000"><br />
&nbsp;*&nbsp;Servlet&nbsp;implementation&nbsp;class&nbsp;FileManagerSaveFileServlet<br />
&nbsp;</span><span style="color: #008000">*/</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;FileManagerSaveFileServlet&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;HttpServlet&nbsp;{<br />
&nbsp;<br />
&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;len</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">处理流</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;mm</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">重命名</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;fileName</span><span style="color: #000000">=</span><span style="color: #000000">""</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">文件原名</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;extName</span><span style="color: #000000">=</span><span style="color: #000000">""</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">文件扩展名</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String&nbsp;tempFileName</span><span style="color: #000000">=</span><span style="color: #000000">""</span><span style="color: #000000">;</span><span style="color: #008000">//</span><span style="color: #008000">文件名加扩展名</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;<br />
&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doGet(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException,&nbsp;IOException&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;processRequest(request,&nbsp;response);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;doPost(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException,&nbsp;IOException&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;processRequest(request,&nbsp;response);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;<br />
&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;processRequest(HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;ServletException,&nbsp;IOException&nbsp;{<br />
&nbsp;&nbsp;request.setCharacterEncoding(</span><span style="color: #000000">"</span><span style="color: #000000">utf-8</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;String&nbsp;realPath</span><span style="color: #000000">=</span><span style="color: #000000">request.getParameter(</span><span style="color: #000000">"</span><span style="color: #000000">realPath</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">System.out.println("FMSFS--&gt;realPath:"+realPath);</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;response.setContentType(</span><span style="color: #000000">"</span><span style="color: #000000">application/octet-stream</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;InputStream&nbsp;is&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;request.getInputStream();<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;{<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;size&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[]&nbsp;tmp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">byte</span><span style="color: #000000">[</span><span style="color: #000000">100000</span><span style="color: #000000">];<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;tempFileName</span><span style="color: #000000">=</span><span style="color: #000000">realPath.substring(realPath.lastIndexOf(</span><span style="color: #000000">"</span><span style="color: #000000">\\</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">切割获得文件名加扩展名</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;fileName</span><span style="color: #000000">=</span><span style="color: #000000">tempFileName.substring(</span><span style="color: #000000">0</span><span style="color: #000000">,tempFileName.lastIndexOf(</span><span style="color: #000000">"</span><span style="color: #000000">.</span><span style="color: #000000">"</span><span style="color: #000000">));</span><span style="color: #008000">//</span><span style="color: #008000">切割获得文件名<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">确保获得真实的文件名如：1(1)可以获得真实为1,</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(fileName.indexOf(</span><span style="color: #000000">"</span><span style="color: #000000">(</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #000000">!=-</span><span style="color: #000000">1</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;fileName</span><span style="color: #000000">=</span><span style="color: #000000">fileName.substring(</span><span style="color: #000000">0</span><span style="color: #000000">,fileName.indexOf(</span><span style="color: #000000">"</span><span style="color: #000000">(</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;extName</span><span style="color: #000000">=</span><span style="color: #000000">tempFileName.substring(tempFileName.lastIndexOf(</span><span style="color: #000000">"</span><span style="color: #000000">.</span><span style="color: #000000">"</span><span style="color: #000000">));</span><span style="color: #008000">//</span><span style="color: #008000">切割获得扩展名<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">调用递归方法</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;fileName</span><span style="color: #000000">+=</span><span style="color: #000000">reNameFile(realPath.substring(</span><span style="color: #000000">0</span><span style="color: #000000">,realPath.lastIndexOf(</span><span style="color: #000000">"</span><span style="color: #000000">\\</span><span style="color: #000000">"</span><span style="color: #000000">)</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">),fileName,extName);<br />
&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;创建一个文件夹用来保存发过来的图片；</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;File&nbsp;f&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(realPath.substring(</span><span style="color: #000000">0</span><span style="color: #000000">,realPath.lastIndexOf(</span><span style="color: #000000">"</span><span style="color: #000000">\\</span><span style="color: #000000">"</span><span style="color: #000000">)</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">fileName</span><span style="color: #000000">+</span><span style="color: #000000">extName);<br />
&nbsp;&nbsp;DataOutputStream&nbsp;dos&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;DataOutputStream(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;FileOutputStream(f));<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;((len&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;is.read(tmp))&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">)&nbsp;{<br />
&nbsp;&nbsp;dos.write(tmp,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;len);<br />
&nbsp;&nbsp;size&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;len;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;dos.flush();<br />
&nbsp;&nbsp;dos.close();<br />
&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(IOException&nbsp;e)&nbsp;{<br />
&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">递归来重命名文件名</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;String&nbsp;str</span><span style="color: #000000">=</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;reNameFile(String&nbsp;realPath,String&nbsp;filename,String&nbsp;extName){<br />
&nbsp;&nbsp;File&nbsp;file&nbsp;</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;File(realPath</span><span style="color: #000000">+</span><span style="color: #000000">"</span><span style="color: #000000">\\</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">filename</span><span style="color: #000000">+</span><span style="color: #000000">extName);<br />
&nbsp;&nbsp;str</span><span style="color: #000000">=</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(file.exists()){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mm</span><span style="color: #000000">++</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">_</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">mm;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reNameFile(realPath,fileName</span><span style="color: #000000">+</span><span style="color: #000000">str,extName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff">else</span><span style="color: #000000">{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(mm</span><span style="color: #000000">!=</span><span style="color: #000000">0</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str</span><span style="color: #000000">=</span><span style="color: #000000">"</span><span style="color: #000000">_</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">mm;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;str;<br />
&nbsp;}<br />
}</span></div>
<p>&nbsp;</p>
<p><br />
&nbsp;</p>
<p>源码: <a title="flex图片剪切示例" href="/Files/obpm/flexCutPicuter.rar">flex图片剪切示例</a></p>
<p><br />
原创人员：Denny</p>
<img src ="http://www.blogjava.net/obpm/aggbug/330501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/obpm/" target="_blank">obpm</a> 2010-09-01 09:55 <a href="http://www.blogjava.net/obpm/archive/2010/09/01/330501.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>