J2ME WTK2.3的一个bug

来源:互联网 发布:kmp的next算法 编辑:程序博客网 时间:2024/06/06 13:01

版本信息: 

****************************************************************************

Version 2.3 (2005-5-31 下午3:44) Copyright 2005 Sun Microsystems, Inc. All rights reserved. SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.

******************************************************************************

说实话,这个版本的定位确实符合它的版本名称-Sun Java Wireless Toolkit 2.3 Beta, 就连安装时的窗口界面的标题都写着2.2的字样,可见开发这个版本是多么的仓促。当然它就是2.2版本的一个升级版本。 升级版本来就是为了修改旧版本的BUG才诞生的,可这个版本好像也没多大改进,旧BUG不见,新BUG又起。真是郁闷了我们这些开发者,昨天不经意间就发现了一个大BUG。 看下面的代码:

 

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class Main extends MIDlet 
{
    
public void startApp() {
        Display.getDisplay(
this).setCurrent(new E());
    }


    
public void pauseApp() {
    }


    
public void destroyApp(boolean b) {
    }


    
class E extends Canvas
    
{
        
public E() {

        }


        
public void paint(Graphics g) {
            
            g.setColor(
0xFFFFFF);
            g.fillRect(
00, getWidth(), getHeight());

            g.setClip(
3030100100);

            g.setColor(
0xFF0000);
            g.drawRect(
35354040);

            g.setColor(
0x0000FF);
            g.drawRoundRect(
2020303044);
        }

    }
;
}

 

代码很简单, 就是在一个Canvas上画两个不同类型的矩形。并且在画之前设置了clip区域。可以注意到后面画的那个圆角矩形会由于clip的原因只能显示一半,但是在WTK 2.3的模拟器上就会完全被画出来了,也就是说setClip函数对drawRoundRect()没有作用。 同样的效果还会发生在fillRoundRect()方法上。 随后我又尝试同样的代码用WTK 2.2 和 WTK 2.5.2 来运行,都会显示正确的结果。所以应该确定这就是WTK 2.3模拟器的问题。

以下分别是 2.3 和 2.5版本的截屏

(WTK 2.3)

(WTK 2.5)

最后说一句,SUN的官方网站上好像已经没有2.2和2.3的版本下载了。难道以后手机上KVM虚拟机对应的JAVA版本也必须是JDK1.5?