本文整理 J2ME 開發中常用的系統參數提取、字串與數值轉換、隨機數生成、時間測量、日期處理以及 Thread 與 Timer/TimerTask 的多線程實作要點。
MIDlet 透過 System.getProperty() 取得執行環境資訊:
microedition.profiles:支援的 Profile 版本 (如 MIDP-2.0)microedition.configuration:支援的 Configuration 版本 (如 CLDC-1.1)microedition.locale:目前地區設定 (如 zh-TW)microedition.platform:平台/裝置型號名稱microedition.encoding:預設字元編碼 (如 Big5、UTF-8)從 JAD/Manifest 讀取的屬性值皆為字串,需轉換後運算:
Byte、Short、Integer、Long 的 parseXXX() 方法。Float、Double。利用 java.util.Random:
Random rnd = new Random(); // 以當前時間為種子
Random rnd = new Random(seed); // 指定種子
rnd.setSeed(newSeed); // 重設種子
int n = rnd.nextInt(); // 取得 int 隨機數
long l = rnd.nextLong(); // 取得 long 隨機數
System.currentTimeMillis() 回傳自 1970/01/01 00:00 UTC 至今的毫秒數。兩次呼叫相減即得經過時間。
new Date() 等同 new Date(System.currentTimeMillis())。Calendar.getInstance() (預設時區/地區) 或 getInstance(TimeZone)。透過 setTime(Date) 或 setTimeMillis(long) 設定時間,再取得年月日時分秒等欄位。run();或實作 Runnable 介面 (建議)。start(),直接呼叫 run() 不會啟動新執行緒。run() 自然返回。stop() 已棄用。兩者配合實現排程任務:
Timer:定時器,可設定固定延遲或週期觸發。TimerTask:抽象類別,繼承並實作 run() 定義任務內容。timer.schedule(task, delay, period) 排程;timer.cancel() 停止所有任務;task.cancel() 停止單一任務。此方式結構清晰,適合需多重定時任務的場景,但類別數較多,系統開銷稍大。