1.JAVA从jdk1.3开始就提供了一个可以控制输入控件的Robot类,从此JAVA可以实现屏幕控制,自动测试,游戏外挂等功能.

2.JAVA从jdk1.4开始就支持全屏独占功能的GraphicsDevice类

3.Swing作为非线程安全的控件,如果需要改变控件的成员属性,就需要新开一个线程用EventQueue.invokeAndWait调用这个线程

4. 在JFrame中写了无数次的getContentPane().add(new JButton());为什么需要加上getContentPane

其实对于JFrame、JDialog、JWindow 和 JApplet都有一个Root Panes





一个Root Panes可以包含四个部分
The glass pane
玻璃面板,顾名思义,它就像一片在root pane之上的玻璃完全透明的,The glass pane 默认是隐藏起来,除非你调用它的setVisible使其可显,当然因为glass pane是Compoment,你可以通过实现他的paintComponent方法来做一些事情。

The layered pane
分层面板,主要由content pane和可选的 menu bar组成,并为这两个组件提供三维布局,也就是z-index.

The content pane
内容面板,这个是我们最熟悉的面板,每当我们在一个JFrame中添加组件调用 getContentPane().add(new JButton())是用到的其实就是content pane ,content pane实际上是root pane除了menu bar的所以可选组件的的容器,

The optional menu bar
可选的菜单栏

ContentPane 的默认布局管理器是 BorderLayout 管理器。但是,JRootPane 使用一个自定义的 LayoutManager。所以,如果您希望更改已添加到 JRootPane 中的组件的布局管理器,一定要确保使用如下代码:
rootPane.getContentPane().setLayout(new BoxLayout());
更多JRootPane信息

5.JAVA 的PixelGrabber类和MemoryImageSource可以很好的支持图像处理



更多PixelGrabber 信息



6.双缓冲不是用来摆脱屏幕闪烁的(JAVA内置了更好的方法),不过BufferedImage可以很好的提高性能,比如RTS中的小地图,里面的Sprite可能是用一个个单元像素拼出来的,如果直接draw到屏幕效率会非常低,在128X128的地图中draw几千个精灵需要好几百毫秒,但如果换成BufferedImage可以提高到15毫秒.

7.hashtable和hashmap最大的两个区别:hashtables是同步的,hashtable的key,value不能为null.

8.

  • 单个 thread 处理所有请求可以处理100个线程并发;
  • 对于每个请求产生一个thread可以处理600个线程并发;

9 java.util.Timer 也容易被错误使用。很多应用程序会创建几个 Timer,每个 Timer 创建一个专门的管理线程。典型地,每个应用程序应只创建一个 Timer 并让它管理多个 java.util.TimerTask,但是很多相互孤立的开发人员会创建他们自己的 Timer,这只会浪费更多的线程。在几乎所有的 RCP 应用程序案例中,java.util.Timer 可以被 Job 取代,计划在未来某个时间执行。如果您所运行的 JVM 版本高于 1.4,您能从 java.util.concurrent Executor、ScheduledThreadPoolExecutor 和 Task 得到大量相同好处。java.util.Timer 类并未受到轻视,但不管出于何种目的,它都可由ScheduledExecutorService替代。关于线程最后值得一提的是:除非您的确需要,不要频繁休眠。清单 8 说明了一个不当行为的例子:
清单 8. 频繁休眠

while(someCondition) {

...more code here...

Thread.sleep(aFewMilliseconds);

...more code here...

}

更多信息:http://www.ibm.com/developerworks/cn/java/j-rcp1/

2007年写的一篇文章,感觉离现在好远,也许我已不会再陪她骑着自行车回家,因为有时候不只是因为Love&Money。

在一个月黑风高的晚上,我和她骑着自行车回家。她告诉我她看了一本叫《毕业了,我们一无所有》的小说,讲的是关于爱情和钱的问题。现在她内心觉得很是矛盾。

可惜当晚我一直在东想西想(会不会有坏人出现,我英雄救美啊!自行车轮胎爆了,我背着她回家哦)没有深入的对这个在每个刚满20岁的小青年身上都会讨论的问题上进行思索!

到底是爱情重要还是钱重要!

我很想武断的讲:其实这是一个悖论,爱情和钱根本不存在谁重要,很简单的----都重要嘛!如果你和你喜欢的人,大家每天都上班的上班,上学的上学,挣钱的挣钱。嗯,很平常,钱和爱情没有冲突。但如果有一天你一不小心踩到狗屎运--捡到500W,或者公司给你出国留学的机会,你的心可能就没有那么平静咯,是走还是留呢?这个时候就要想一想到底钱和爱情谁更重要!

作为一个负责任的男人是不应该告诉她心爱的女孩:爱情更重要的!难道爱情真的要像杨过和小龙女一样不食人间烟火吗?在江湖年代也许是的,但现在是21世纪(有点土,已经喊了几年咯,但还是21世纪噻,我不可能为了点击率讲现在是22世纪),江湖年代早已远去,我也不混黑社会,只想每天和另外一位开开心心的过一辈子,在21世纪要想开心,最基本的物质生活是要满足的,不能像江湖年代两个人每天练眉来眼去剑都能混一个月!

如果你的男朋友告诉你:因为我爱你,所以对我来说爱情更重要!那么你千万不要相信他的鬼话。

第一,拿对你的爱和钱相比,就没显出诚意。

第二,你真的想和一个穷鬼过一辈子吗?也许你不介意,你的家人,你的孩子,你亲友好友,还有那些闲言碎语都会让你郁闷的!

第三,说这样的话就证明他胸无大志。对于一个男人爱情确实很重要,但是事业恐怕还要重要的多,在我们具有中国特色的社会主义国家:一个人的事业多多少少和他挣的钱成正比例吧!(卖盗版碟子挣钱能开起宝马的也是一种能力)

当然如果一切都是向钱看也是不明智的。这方面早已经成为大家的饭后谈资,我就懒得再打咯!比较稳定的做法是:

Believe your heart! 相信你的感觉,如果你真心喜欢她,并且你觉得现在的平淡生活已经能让你动容,那么就毫不犹豫的选择爱情!

如果你要成就一番事业,不愿意默默的过一生,也许放弃是一种美,爱你的人也不会怪你的(但他可能会很难过)

有没有觉得Struts2越来越臃肿?

有没有觉得Spring+Struts2+Hibernate的整合框架启动越来越缓慢?


有没有觉得自己只把Spring作为容器来使用而Spring提供的大部份服务并不会用上白白的浪费启动时间?


想不想有一个框架启动速度飞快?


想不想有一个框架出现的bug可以自己掌握?


想不想有一个框架没有一大段一大段的配置文件?


如果你想的话,来吧!和我一起像个孩子搭积木一样从新考量WEB框架


首先作为几十万的中小型项目,Spring一般用到的功能就是容器,AOP拦截,定时任务调度,事务处理。然而使用Spring这些简单的功能,越又不得不忍受它的缓慢和臃肿。来源于Webwork2的Struts2秉承了Spring慢的一切特点,它摆夺了Webwork2的简单灵活,吸收了菜市场的大杂烩,把一切好玩,好看的,新鲜的都收入囊肿,然后它忘了,我们要的是简单,要的是快速,要的是稳定!


这一切JAVA开发人员已经受够了!


首先无法忍受的是google的 java程序员crazyBob,这位天才程序员创造性的利用java5提供的annocation开发了guice框架,这是一个号称比spring快100倍的小型框架,再也没有XML配置文件,再也没有又臭又长的spring命名风格和继承体系,要了建更多guice框架信息,请访问google.com输入guice.


那么Struts2呢?平心而论,它的开发方式是简单不错的,而且大量的开发人员已经习惯了它。它错在那些鸡肋的拦击器上,弱智的类型转换上面,混乱的验证封装上面。如果让我们选择其它框架比如面向组件的框架T5,这个变化似乎来的激烈了一点。算了吧,我们自己庖丁解牛,一步一步去掉Struts2多于的杂碎吧!


首先需要把我们的新容器guice加入到我们的web应用程序来管理所有的Object,为了达成这个目的,需要修改web.xml,把com.google.inject.servlet.GuiceFilter管理所有的请求(详细代码请看源文件)

接着定义一个接口和实现类

package test;
import com.google.inject.ImplementedBy;
@ImplementedBy(value = HomeServiceImpl.class)

public interface HomeService {
public void show(String id);
}

package test;
import com.google.inject.Singleton;
@Singleton

public class HomeServiceImpl implements HomeService {
public void show(String id) {System.out.println("hello "+id); }

}

这两个元注释都是guice定义的,意义都很明了,就是单列模型。

Action也很简单:

public class HomeAction implements Action {

private String userName;

private HomeService homeService;

public String execute(){

homeService.show(userName);

return SUCCESS;

}

@Inject

public void setHomeService(HomeService homeService) {

this.homeService = homeService;

}

}

和以前唯一不同的是加了一个 @Inject 元注释

启动服务器信息:Server startup in 2946 ms

确实比较快了.

因为blogger写代码确实比较痛苦,省略了改造struts2和其标签的代码,详见源代码

不知道从什么开始,每到星期五总希望这个周末好好学习一下自己感兴趣的新技术,然而每个周末都是被我无缘无故,莫名其妙浪费掉了,上个周末是怎么度过的呢?每到星期一我总在想,然而这就像钱包里面的钞票,你总不知道它是怎么被用掉的,唯一可以肯定的是--里面钱没了。

为了不再恶性循环下去,我还是记下这个周末的流水帐,除去晚上睡觉的时间,这个周末我都干了些什么呢?

星期五晚上浏览网页,什么sina博客,别人的qq空间,163新闻,就这样瞎逛到晚上10点看鲁豫有约访问周星驰宣传长江七号。

个人感觉鲁豫有约不是那么特别好看,陈鲁豫提的问题也特别白痴,问徐娇小朋友你家里打你吗?徐娇说打,然后又立马问周星驰,你家里打你吗?周星驰回答打。然后又问徐娇小朋友你学习成绩怎么样?然后又立马问周星驰相同的问题......完全是没事找事,瞎问。我大半夜看你访问周星驰我容易么,本来期待很高,没想到你老问这些,本来这里应该发“汗”的表情。唉~~~~居然发现这博客没表情,我倒。。。

唯一亮点是结尾的时候放了一部星迷的个人短片还不错。因为周五看鲁豫有约特郁闷,所以化郁闷为睡觉。星期六一直睡到10点过到11点才起床,又自然反应似的看163,sina,1-apple,全然忘了自己的星期五规划的周末。

看来这个周末的学习计划又要泡汤咯!~~~~~~

我也就破罐子破摔和阿聂复习一盘星际算了,不过他是完全不在状态,被我采用毛主席的战略思想农村包围城市轻松围死。

下午发现衣服已经两个多星期没洗了,又恐天气寒冷,手洗不胜寒,只得把张亮兄请来借洗衣机一用,没想到衣服太多,洗衣机一洗又是一下午。中途又把街霸复习一盘。 晚上也不知聂兄几时归?只得和亮兄三杯两盏淡酒,把公司一顿臭骂。回到家中已是8点,完了!这周六就玩完了,还是复习一部周星星的电影算了。

这就是我周末的独白,高举无聊的虚度埋葬自己的未来!

一名.Net程序员的自身修养是什么?

鼠标操作
还是鼠标操作!
绝对是鼠标操作!

以前用256mb内存时候见过运行速度慢的Eclipse,心里有点绝望--有比这个还慢的IDE吗?今天用1G内存来运行vs2008不得不感叹:靠,还真有!

除了复制,粘贴,运行几个快捷键,就没发现什么快捷键,Ms的朋友,我们玩星际都用快捷键了,你们还用鼠标吗?

我知道了,这是MS的阴谋,anythins is widget!
只需要托着控件做开发,还需要键盘干什么?

所以,
一名.Net程序员的自身修养是什么?
鼠标操作,
还是鼠标操作!
绝对是鼠标操作!

vs2008绝对是垃圾中的垃圾,失败中的失败,还好意思收钱,我靠,你怎么不去SI!

最近发现一款可视化浏览工具Cooliris ,可以让你在桌面系统中像iphone一样浏览图片,视频,新闻,而且不怎么占用资源,但是也发现有个缺点,播放视频的时候,不能一边缓冲一边浏览其它资源。不过老外真的比较Cool!






常常在想如果我能从小开始记录自己生活中的点点滴滴,当老了一个人孤独寂寞的时候,拿出以前几十年的生活记录出来回忆应该是一件比较幸福的事情。可惜自己确实是一个比较懒惰的人,一直没有养成记Blog的习惯,这个blogger还比较中意,希望能从这里开始吧....