J2ME 技术的学习与实践者

#

[导入]兼容性对J2ME程序设计的确是一个主要的问题!


网站: JavaEye  作者: iwinyeah  链接:http://iwinyeah.javaeye.com/blog/170016  发表时间: 2008年03月11日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

对于手机理财JAcount,我在SE K750, SE P990,Philips768, Nokia2630上进行过完整的测试,都没有什么问题.最近,在移动那里一元购机了一台Nokia6070,原以为与Nokia2630一样是S40的机器,应该没什么问题,结果余额表和收支表重复算两次后出现了"应用程序错误",详情是Array Index out of bounds,我估计是内存不足,于是在重新开启程序,打开了第一次收支表后检查了内存,还有300多K,再次打开收支表,又出错了,还未搞清楚是什么原因,真有点失败的感觉,前一段时间在聊天时借了别人的Nokia N73,结果安装时候就死机了,还没机会检查是什么问题,现在先弄好Nokia 6070的问题吧.唉!兼容性!
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐




文章来源:http://iwinyeah.javaeye.com/blog/170016

posted @ 2008-03-11 06:36 iwinyeah 阅读(99) | 评论 (0)编辑 收藏

[导入]OpenBaseMovil 设备检测(2)


网站: JavaEye  作者: iwinyeah  链接:http://iwinyeah.javaeye.com/blog/169545  发表时间: 2008年03月09日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

唉,有贴代码骗粮票的嫌疑呢,至少大家可以在这里看到各种设备的规格方法了.
    public static boolean isBlackBerry()
    {
        return checkPlatform( "RIM" );
    }

    public static boolean checkPlatform( final String key )
    {
        final String platform = System.getProperty( "microedition.platform" );
        return platform != null && platform.toUpperCase().indexOf(
                key.toUpperCase()
        ) > -1;
    }

    public static boolean checkUserAgent( final String key )
    {
        final String userAgent = Application.getManager().getProperty(
                "user-agent"
        );
        return userAgent != null && userAgent.toUpperCase().indexOf(
                key.toUpperCase()
        ) > -1;
    }

    public static boolean checkPlatform( final String[] keys )
    {
        final int length = keys.length;
        for( int i = 0; i < length; i++ )
        {
            if( checkPlatform( keys[i] ) )
            {
                return true;
            }
        }
        return false;
    }

    public static boolean isNokia()
    {
        return checkPlatform( "Nokia" );
    }

    public static boolean isEmulator()
    {
        return checkPlatform( new String[] { "j2me", "SunMicrosystems_wtk" } );
    }

    public static boolean isSonyEricsson()
    {
        return checkPlatform( "SonyEricsson" );
    }

    public static boolean isSonyEricssonJP7()
    {
        return isSonyEricsson() && checkPlatform( JP7 );
    }

    public static boolean isSymbian()
    {
        return checkUserAgent( "SymbianOS" );
    }

    public static boolean isSeries60()
    {
        return checkUserAgent( "Series60" );
    }

    public static boolean isSeries60_2nd()
    {
        return checkUserAgent( "Series60/2" );
    }

    public static boolean isSeries60_3rd()
    {
        return checkUserAgent( "Series60/3" );
    }

本文的讨论也很精彩,浏览讨论>>


JavaEye推荐




文章来源:http://iwinyeah.javaeye.com/blog/169545

posted @ 2008-03-09 18:55 iwinyeah 阅读(55) | 评论 (0)编辑 收藏

[导入]Java 初学者应对以下代码问个为什么


网站: JavaEye  作者: iwinyeah  链接:http://iwinyeah.javaeye.com/blog/169280  发表时间: 2008年03月08日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

public void main(){
	Integer nullInt = null;
	tryChangeInteger(nullInt);
	if(nullInt == null){
		System.out.println("\nThe Object nullInt not be changed.");
	}else{
		System.out.println("\nThe Object nullInt now is " + nullInt);
	}
}	

private void tryChangeInteger(Integer theInt){
	theInt = new Integer(100); 
}

// 控制台应打印出什么呢?(The Object nullInt not be changed.)
//
// 关键要理解好Java的参数传递是传值而不是传引用,因而在tryChangeInteger方法
// 里得到的theInt不是main方法里的nullInt,而是nullInt的副本,nullInt值并没有被改变。

// 再请看以下代码

public void main() {
	char[] initChars = new char[10];
	initChars[0] = 'a';
	tryChangeCharArray(initChars);
	if(initChars[0] == 'a'){
		System.out.println("\nThe Object initChars[0] not be changed.");
	}else{
		System.out.println("\nThe Object initChars[0] now is " + initChars[0]);
	}
}		

private void tryChangeCharArray(char[] theChars){
	if(theChars != null && theChars.length > 0){
		theChars[0] = 'b';
	}
}
	
// 控制台应打印出什么呢?(The Object initChars[0] now is b")
// Why?
// 弄明白了这个,JAVA引用基本就明白了。

本文的讨论也很精彩,浏览讨论>>


JavaEye推荐




文章来源:http://iwinyeah.javaeye.com/blog/169280

posted @ 2008-03-08 07:16 iwinyeah 阅读(56) | 评论 (0)编辑 收藏

[导入]OpenBaseMovil 设备检测(1)


网站: JavaEye  作者: iwinyeah  链接:http://iwinyeah.javaeye.com/blog/168955  发表时间: 2008年03月07日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

以下代码由bm.core.tools.DeviceInfo.java抽出,详见该文件
    private void testFontListBug()
    {
        if( isNokia() )
        {
            // 就算是Nokia的设备也要进行一下测试来确定是否有这个Bug
            final Font font = Font.getFont(
                    Font.FACE_PROPORTIONAL,
                    Font.STYLE_PLAIN,
                    Font.SIZE_SMALL
            );
            final List list = new List( "", List.IMPLICIT );
            for( int i = 0; i < 3; i++ )
            {
                list.append( "", null );
            }
            for( int i = 0; i < 3; i++ )
            {
                list.setFont( i, font );
            }
            list.deleteAll();
            try
            {
            for( int i = 0; i < 4; i++ )
                {
                    list.append( "", null );
                }
                listFontBug = false;
            }
            catch( Throwable e )
            {
                listFontBug = true;
            }
        }
        else
        {
            // 除Nokia设备外,其它设备都假定它有这个Bug
            // 不知道实际上是不是这样呢?我估计大部分的手机都有这个问题
              // 不然他不会这么做
            listFontBug = true;
        }
    }


那么这个Bug是什么呢?
我在bm.mvc.ListBrowserView中找到如下代码:
    if( !DeviceInfo.getDeviceInfo().hasListFontBug() )
    {
        final int itemCount = list.size();
        for( int i = 0; i < itemCount; i++ )
        {
            list.setFont( i, Util.SMALL_FONT );
        }
    }

也就是说,有这个Bug的设备不能将List的项的字体更改为SMALL_FONT
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐




文章来源:http://iwinyeah.javaeye.com/blog/168955

posted @ 2008-03-07 09:46 iwinyeah 阅读(72) | 评论 (0)编辑 收藏

[导入]OpenBaseMovil Nokia s60, 6670,e71,e61问题?


网站: JavaEye  作者: iwinyeah  链接:http://iwinyeah.javaeye.com/blog/168522  发表时间: 2008年03月06日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

   private void doShow()
    {
        // This delays minimze the chance that a Nokia 6670 or Nokia S60 3rd
        // edition device (might apply to other nokias) freez when showing a
        // view. The total delay of 600ms, with this distribution seems to
        // make it stable on E70 and E61. The delay is only applied to Nokia
        // phones at this moment
        if( displayable != null )
        {
            final Display display = Application.getManager().getDisplay();
            delay();
            delay();
            display.setCurrent( displayable );
            if( !DeviceInfo.isNokia() && focusedItem != null )
            {
                delay();
                delay();
                display.setCurrentItem( focusedItem );
            }
            setCurrent( this );
            delay();
            delay();
        }
    }

    private void delay()
    {
        if( delay )
        {
            // Under some strange circumstances the Nokia 6670 crashes whitout this delay
            try
            {
                Thread.sleep( 100 );
            }
            catch( InterruptedException e )
            {
            }
        }
    }



是否的确是这样?天啊,谁可以使用以上环境的设备给我测试一下我的手机理财JAccount呢?
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐




文章来源:http://iwinyeah.javaeye.com/blog/168522

posted @ 2008-03-06 07:54 iwinyeah 阅读(111) | 评论 (0)编辑 收藏

[导入]强烈建议安装Jode Decompiler


网站: JavaEye  作者: iwinyeah  链接:http://iwinyeah.javaeye.com/blog/168521  发表时间: 2008年03月06日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

如果你用Eclipse开发java应用的话,我强烈建议你安装它,这样,你随时可解开jar文件浏其他人特别是SUN公司的源代码了(SUN的JAR没有经过混淆),对于学习java是十分有益而高效的.
Eclipse/软件更新/查找与安装/新建远程站点/地址为:http://www.technoetic.com/eclipse/update

安装完成后,要使用时,在包资源管理器上列出你要查看的class,双击该文件,会出现错误提示,不理它,再双击一次就可以在编辑器上出现源代码了!超方便!
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐




文章来源:http://iwinyeah.javaeye.com/blog/168521

posted @ 2008-03-06 06:36 iwinyeah 阅读(798) | 评论 (0)编辑 收藏

[导入]OpenBaseMovil 的高速对象缓存机制


网站: JavaEye  作者: iwinyeah  链接:http://iwinyeah.javaeye.com/blog/168482  发表时间: 2008年03月05日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

一个简单的高速对象缓存
public class SimpleCache
{
    private static long wideHits;
    private static long wideMisses;

    private Hashtable   cache;
    private Vector      stamps;
    private int         maxSize;
    private long        hits;
    private long        misses;

    // ...部分省略

    // 构建函数,根据SIZE构建Cache和命中表
    public SimpleCache( final int size )
    {
        this.maxSize = size;
        cache = new Hashtable( size );
        stamps = new Vector( size );
    }

    // ...部分省略

    public void add( final Object key, final Object object )
    {
        // 为什么不直接使用cache而要使用另一个引用?
        final Hashtable cache = this.cache;

        if( !cache.containsKey( key ) )
        {
            if( cache.size() == maxSize )
            {
                discard(); // 如果Cache超过容量,按策略丢弃过时的对象
            }
            // 在Cache中加入这个对象
            cache.put( key, object );
            // 相应也插入命中表第一位
            stamps.insertElementAt( key, 0 );
        }
        else
        {
            // 更新Cache
            cache.put( key, object );
            // 也算命中一次
            touch( key );
        }
    }

    // ...部分省略

    public synchronized Object get( final Object key )
    {
        final Object o = cache.get( key );
        if( o != null )
        {
            hits++;
            wideHits++;
            // 算命中一次
            touch( key );
        }
        else
        {
            misses++;
            wideMisses++;
        }
        return o;
    }

    // ...部分省略

    // 总是丢弃最后一个对象,
    private void discard()
    {
        final Object key = stamps.lastElement();
        stamps.removeElement( key );
        cache.remove( key );
    }

   // 每次从Cache取用某key对象,都将它插到第一位
    // 这样不常用的对象将很快会被推至最后一位
    private void touch( final Object key )
    {
        stamps.removeElement( key );
        stamps.insertElementAt( key, 0 );
    }
}

本文的讨论也很精彩,浏览讨论>>


JavaEye推荐




文章来源:http://iwinyeah.javaeye.com/blog/168482

posted @ 2008-03-05 22:29 iwinyeah 阅读(63) | 评论 (0)编辑 收藏

[导入]WTK模拟器之RMS文件(4 完结篇)


网站: JavaEye  作者: iwinyeah  链接:http://iwinyeah.javaeye.com/blog/167866  发表时间: 2008年03月04日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

感谢Cavaj!在Eclipse在包资源管理器上查到RecordStore.class在midpapi10.jar中
将C:\WTK22\lib\midpapi10.jar解开,然后用Cavaj!反编译RecordStore.class,得到了两个类,果然有些料到,不仅有记录链表,还有自由链表,自由空间重用与分裂...,用代码说话(个人做了一些修改和注释)!

------------------------
写在最后:原来研究它的目的是在利用J2me可选包FileConnection方式来实现手机理财JAccounthttp://iwinyeah.javaeye.com/admin/categories/27410,但经分析后,FileConnection没有实现skip()方法,换言之,不能对文件进行自由读写,因而该计划也落了空.

在此也感谢无花http://wuhua.javaeye.com/的提醒,的确,手机实现的FileConnection的安全检查太多了,严重影响用户体验,不太合适用于这种方式的应用.

新计划是手机理财JAccount上增加备份与恢复功能(read和append方式是FileConnection所支持的)由于备份和恢复无须经常地使用,用户也可接受.
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐




文章来源:http://iwinyeah.javaeye.com/blog/167866

posted @ 2008-03-04 21:41 iwinyeah 阅读(343) | 评论 (0)编辑 收藏

[导入]我记单词的方法写在这里


网站: JavaEye  作者: iwinyeah  链接:http://iwinyeah.javaeye.com/blog/167074  发表时间: 2008年03月03日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

有一个英语学习的圈子,我不想加入,看到有人要记单词,我也把我的方法写在下面:
个人经验:找一本7000单词的字典,约100页左右,每天反复记1页,未记好的用铅笔打上标记,第二天先复习以前打上标记的单词,已会的,将标记刷掉,然后记新一页,如此坚持,100天基本可记住7000单词,然后加快速度,每天4页,再记一次,则功成矣!

看来,弄一个手机记单词的软件也许不错呢,难度不大,如果真正有用,也许有一定市场呢,毕竟学生是消费力很强的群体.
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐




文章来源:http://iwinyeah.javaeye.com/blog/167074

posted @ 2008-03-03 21:22 iwinyeah 阅读(87) | 评论 (0)编辑 收藏

[导入]OpenBaseMovil事件处理: 事件对象


网站: JavaEye  作者: iwinyeah  链接:http://iwinyeah.javaeye.com/blog/167071  发表时间: 2008年03月03日

声明:本文系JavaEye网站发布的原创博客文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

Event事件对象: 有如下属性:
protected Integer type; // 事件类型,预定义了全局事件,改变语言事件和进度事件
protected boolean consumed; // 事件是否已被处理
protected Hashtable attachments; // 以哈希表表示的与事件相关的对象附件

通过在静态事件对象预先登记多个各种类型的事件监听器,当有事件发生时,就可通过殂态事件对象将事件发送给事件监听器进行处理.事件监听器收到事件后,可根据事件类型和附件作出响应,如果不想在它之后登记的监听器再处理该事件,则将consumed设置为true.

代码如下:
public static void dispatch( final Event event )
{
// 以下还未明白什么意义
// 如果是进度事件并且当前的线程已在后台任务中登记则不处理?
if(
!event.type.equals( PROGRESS ) ||
!backgroundTasks.contains( Thread.currentThread() )
)
{
final Vector v = (Vector) listeners.get( event.type );
if( v != null )
{
final int count = v.size();
for( int i = 0; i < count && !event.consumed; i++ )
{
final EventListener listener = (EventListener) v.elementAt( i );
listener.handleEvent( event );
Thread.yield();
}
event.consumed = false;
}
}
}
本文的讨论也很精彩,浏览讨论>>


JavaEye推荐




文章来源:http://iwinyeah.javaeye.com/blog/167071

posted @ 2008-03-03 21:07 iwinyeah 阅读(62) | 评论 (0)编辑 收藏

仅列出标题
共2页: 上一页 1 2