#
網站:
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