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

通過實例論證 J2ME 事件傳輸機制的串行化特性

     編輯:Java 相關知識

本文圍繞 J2ME Canvas 類事件傳輸的串行化機制進行分析與實證。根據 JavaDoc,J2ME 事件傳輸是串行化的:當一個事件方法調用完成後,下一個事件方法才會被調用,確保用戶上一次輸入處理完畢才響應下一次輸入。

事件方法清單

MIDP 定義的事件方法包括:

  • showNotify() / hideNotify()
  • keyPressed() / keyRepeated() / keyReleased()
  • pointerPressed() / pointerDragged() / pointerReleased()
  • paint()
  • CommandListener.commandAction()

實證實驗設計

假設:在 showNotify() 中調用 repaint() 請求重繪,會觸發 paint()。在每個事件方法中讓線程睡眠 2000ms,若確為串行化,程序將斷斷續續繪製按鍵名。

public class KeyCodes extends MIDlet { ... }

class KeyCodeCanvas extends Canvas implements CommandListener {
    private String keyText = "hello let's go!";
    
    protected void paint(Graphics g) {
        System.out.println("I am invoked!");
        // 繪製背景與 keyText
    }
    
    public void showNotify() {
        repaint();
        sleep(2000); // 模擬耗時操作
    }
    
    protected void keyPressed(int keyCode) {
        keyText = getKeyName(keyCode);
        repaint();
        sleep(2000);
    }
    // ...
}

運行觀察結果

  1. Canvas 顯示時,showNotify() 首先被調用,其 repaint() 請求不會立即繪製
  2. 需等待 2 秒 showNotify() 返回後,paint() 才開始執行
  3. 這 2 秒內按鍵不會觸發重繪,按鍵事件被緩存到隊列
  4. showNotify() 結束後,緩存的按鍵事件依次被處理,每個事件間隔 2 秒繪製一次

程序運行截圖

關鍵補充說明

Canvas JavaDoc 提到:

  • serviceRepaints() 可強制執行掛起的繪圖請求
  • showNotify()/hideNotify() 使用注意事項

開發者可參考 JavaDoc 了解進一步細節。實驗確認:J2ME 事件傳輸確實嚴格串行化,事件處理互不打斷,按順序隊列處理。

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