1

「タイマー」スレッドを一時停止したい....または、それを「待機」モードにして、何かが完了した後に通知したいと言うことができます。

Timer _catchTimer = new Timer(); CatchAppNameTimer _catchTimerTask = new CatchAppNameTimer(_catchTimer); _catchTimer.schedule(_catchTimerTask, 0, 5000);

私の「TimerTask(_catchTimerTask)」は毎回ポップアップ画面を表示します....そのポップアップ画面には2つのボタンがあります-ロック解除、キャンセル。

基本的には、ユーザーがクリックするまで....ロック解除/キャンセルボタンの1つ、タイムスレッドが待機モードに設定されるまで欲しい.....ユーザーがロック解除/キャンセルボタンの1つをクリックすると..... ....その後にのみ、時間スレッドが通知されます。

現在、「timertask」の実行メソッドでブール変数を使用しています.....デッドロック状況を処理するために......つまり、TimerTask は数秒ごとに呼び出されます...ポップアップ画面がすでに表示されている場合でも示されている..........

次のように :

public void run() { 


GlobalSingleton obj = null; 
  obj = GlobalSingleton.getInstance(); 
  if( obj.getShowDialog() ) 
        return;

   unlockField();
}

初めて「unlockFiled()」が呼び出されたとき........ブール変数をtrueに設定します(ランタイムストアを使用).......その値はgetShowDialog()メソッドによって取得されます。そして

fieldChanged(Field field, int context) { }Unlock / Cancelボタンの両方のメソッド...........を呼び出すことにより、ブール変数の値をfalseに設定します...

GlobalSingleton obj = null; obj = GlobalSingleton.getInstance(); obj.setShowDialog(false);

しかし、正しいアプローチは、「タイマータスク」を再度開始しないことです........ユーザーがブロック解除/キャンセルボタンを押して、制御がfieldChanged(Field field, int context) { }メソッドから出るまで。

ブール変数に基づいて、Timer オブジェクトに対する待機 - 通知操作を処理するために、differnet スレッドを使用する必要があります。私はすでにこのアプローチを試しました........しかし、解決策を得ることができません...

私はどんな提案にも感謝します....

よろしく。

4

3 に答える 3

0

別の Thread で TimerTask を監視します。また、ジョブを停止するように Timetask に通知するだけで、条件が満たされたときに while ループのような条件を指定します。

于 2012-06-01T12:22:19.663 に答える
0

私が理解していないので、いくつかのイベントをリッスンしてこのイベントを実行するスレッドがあります。Mayby の生産者と消費者のパターンが役立ちます。

1 メッセージをキューに入れるプロデューサーがある

2 メッセージが保存される BlockingQueue があります

3 BlockingQueue からメッセージを読み取るスレッドがあり (キューが空の場合、スレッドはメッセージを待機します)、ダイアログの表示/非表示をメッセージに依存します。

これが最も単純で明確な実装になると思います。

于 2012-06-01T12:09:44.423 に答える
0

BOSS と Alexey の貢献に感謝します。連続実行中のスレッドが 1 秒間スリープ状態になるという問題を解決しました。

私の解決策は、- 解決策 またはメインスレッドで 提供されます。ブラックベリールームでチャットを開始するには評判が必要なので、私の解決策が役立つかどうか投票してください。

と思います。

于 2012-06-15T08:50:03.110 に答える