#
网站:
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
网站:
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
网站:
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
网站:
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
网站:
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
网站:
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
网站:
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
网站:
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方式来实现手机理财JAccount
http://iwinyeah.javaeye.com/admin/categories/27410,但经分析后,FileConnection没有实现skip()方法,换言之,不能对文件进行自由读写,因而该计划也落了空.
在此也感谢无花
http://wuhua.javaeye.com/的提醒,的确,手机实现的FileConnection的安全检查太多了,严重影响用户体验,不太合适用于这种方式的应用.
新计划是手机理财JAccount上增加备份与恢复功能(read和append方式是FileConnection所支持的)由于备份和恢复无须经常地使用,用户也可接受.
本文的讨论也很精彩,浏览讨论>>
JavaEye推荐
文章来源:
http://iwinyeah.javaeye.com/blog/167866
网站:
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
网站:
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