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/

0 Comments:

Post a Comment