首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2ME

J2ME HTTP 排行榜實作:完整客戶端架構與網路通訊核心模組解析

     編輯:J2ME

專案架構概覽

本範例展示一個基於 MIDP 2.0 + LCDUI 的排行榜客戶端,採用 主 MIDlet + 背景執行緒 + GameCanvas 自繪 的經典架構,實現 HTTP GET 請求、資料解析與排名顯示完整流程。

核心類別設計

主 MIDlet 類別

  • 管理應用生命週期(startApp、pauseApp、destroyApp)
  • 持有 Display 參考與主表單(Form)
  • 註冊「查看排行榜」命令(Command),觸發背景執行緒啟動網路請求
  • 提供 Chang(String) 回調供網路模組切換顯示畫面

網路處理內部類:TopHttp extends GameCanvas implements Runnable

採用 GameCanvas 雙緩衝機制(super(true)),在獨立執行緒執行網路操作,避免阻塞事件派發執行緒(EDT)。

關鍵技術實作細節

HTTP 連線與資料讀取

HttpConnection hc = (HttpConnection) Connector.open(url);
DataInputStream dis = hc.openDataInputStream();
byte[] buffer = new byte[(int) hc.getLength()];
dis.read(buffer);
String response = new String(buffer);

注意:hc.getLength() 可能返回 -1(Chunked 編碼),生產環境應改用迴圈讀取至 EOF。

伺服器回應解析策略

伺服器回傳格式假設為:名次&玩家名稱&分數$名次&玩家名稱&分數$...<Html>

  • 先截取 <Html> 前的有效資料區段
  • 以 $ 分割各筆排名記錄
  • 每筆記錄再以 & 分割欄位

自訂 split(String, String) 方法實現字串分割(MIDP 無 String.split()),使用 Vector 動態收集結果再轉陣列。

GameCanvas 自繪渲染

Graphics g = getGraphics();
Font font = Font.getFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_LARGE);
g.setFont(font);
g.setColor(0, 0, 0);
g.drawRect(0, 0, getWidth(), getHeight()); // 邊框
// 逐行繪製排名文字
g.drawString(rank + "  " + playerName + "  " + score, x, y, Graphics.HCENTER | Graphics.TOP);
flushGraphics(); // 雙緩衝刷新

程式碼品質與改進建議

現狀問題建議改進
硬編碼伺服器 IP/URL外部化至 JAD 屬性或資源檔,支援多環境部署
同步阻塞 I/O 在執行緒中可接受,但建議加入連線/讀取逾時設定(hc.setRequestProperty)
解析邏輯脆弱(依賴特定分隔符)改用 JSON/CSV 結構化格式,或至少定義協議常數
缺乏網路錯誤重試與使用者提示加入重試機制、錯誤代碼映射至友善訊息
未釋放連線資源(finally 區塊缺失)務必在 finally 關閉 dis、hc

總結

此範例展示了 J2ME 時代典型的「同步阻塞 HTTP + 執行緒 + 自繪 UI」開發模式。雖然技術棧已歷史性退場,但其核心思想——主執行緒非阻塞、資源確定性釋放、協議解析容錯——在現代行動開發(OkHttp + Coroutines/Flow、Retrofit + RxJava)中依然通用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved