-3

私は仮想キーボードモジュールを開発しました、それは2つのクラスを含みます

  1. KBM(モジュール自体)(Enterキーを押すと、文字列データの値がKBMListenerで入力したテキストに設定され、KBMListenerでブール値がtrueに変更されます)
  2. KBMListener
  3. MainFrame

mainFrameの機能:

プログラムを実行すると、MainFrameはGUIをロードし、「public voidrun()」で「while(true)」ループを開始します。このループは次のようになります:

while(true){
    if(status_changed){
        jTextArea.setText(getKbml().getData());   
        getKbml.setStatus_changed(false);
    }
    sleep(500);
}

ブール値のstatus_changedは、キーボードリスナーで変更されます。

KBMは仮想キーボードです。ユーザーがテキストを入力してEnterキーを押すと、KBMListenerで文字列データがテキストタイプに設定され、ブール値status_changedがtrueに設定されます。

KBMLは、メインフレームをKBMに接続し、ユーザーがメインフレームのテキストエリアをクリックするたびにKBMからキーボードをロードします。

私が欲しいのは、0.5秒ごと、またはEnterキーを押すとすぐにメインフレームに値を取得することです。

ループは正常に機能していますが、1.6GHzデュアルコアプロセッサのCPU使用率は約12%です。コールバックについて聞いたのですが、どのように機能するのか理解できません。誰かが私を助けてくれることを願っています...ドキュメントリスナーを避けてください。

4

1 に答える 1

1

調べたいのは、オブザーバーのデザインパターンです。インターフェイスを使用して「リスナー」に変更を通知し、多くの場合、無限ループへの回答になります。簡単な実装例と詳細については、http://java.dzone.com/articles/design-patterns-uncoveredを参照してください。

または、単に「オブザーバーパターンjava」をWebで検索します。

于 2013-03-24T09:24:59.503 に答える