2

Bluetoothを使用するJavaMEアプリを作成しています。

どのように電流を変えようとしても、Displayableそれは変わりません。

私のアプリは、起動時に表示可能な現在の値として「devices」というテキストボックスを設定し、別のクラスのメソッドで「devicelist」というリストにcurrentを変更します。

しかし、現在のテキストボックス(デバイス)に戻そうとしても、変更されません。

midletクラスでdisplayオブジェクトを使用し、他のクラスでもgestDisplayを使用してみました。ただし、Listオブジェクト(deviceList)は現在のDisplayableのままです。

更新私のテストによると、いくつかのバグがあるようです。TextBox(デバイス)は現在の表示可能ですが、チェックisShownするとfalseになります。代わりに、テストされたときの他のDisplayable:List(deviceList)がisShowntrueになります。API仕様では、setCurrentメソッドの効果はすぐには現れないことが示唆されていますが、現在のDisplayableは変更されていますが、画面には表示されません。これは、実際のデバイスとエミュレーターの両方で発生します。

4

1 に答える 1

1

仕様の正しい部分を 1 つ見つけましたが、すべてではありませんでした。そのため、混乱しています。

setCurrent メソッドの効果が即時ではないというあなたの理解は、実際には 100% 正しいです。それは API javadocs が指定するものです。

  • Display.setCurrent(表示可能) :

    ...通常、変更はすぐには反映されません。次のイベント配信メソッドが呼び出される前に発生することは保証されていませんが、イベント配信メソッドの呼び出しの間に発生するように遅延する可能性があります。setCurrent() メソッドは、変更が行われるのを待たずにすぐに戻ります...

さて、現在の Displayable が変更されているが表示されていないというあなたのメモは、あなたが使用しているように感じさせgetCurrent、画面がいつ表示されるかを確実に伝えることを期待しています。そうではありません。API ドキュメントをご覧ください。

  • Display.getCurrent() :

    この MIDlet の現在の Displayable オブジェクトを取得します... 返されるオブジェクトは実際には表示されない場合があります... Displayable.isShown()メソッドを呼び出して、Displayable が実際にディスプレイに表示されるかどうかを判断できます。

したがって、簡単な答えは、isShown()(getCurrent の代わりに) を使用して、必要な画面がいつ表示されるかを調べることです。それでも...

...遅延が発生しているという事実、特にこれがエミュレーターでも発生するという事実は、midlet に設計上の問題がある可能性があると感じさせます。UI と同じスレッドで実行し、それをブロックして無反応にする「重い」アクティビティがあるかどうかを確認することを強くお勧めします。

UI イベント スレッドでの高負荷を回避します。commandActionorなどの内部でやるべきことがたくさんある場合は、それを行うkeyPressedためpointerPressedに新しいスレッドを生成するだけです。これがあなたの midlet に当てはまる場合は、このチュートリアルを調べて、正しく行う方法を見つけることを検討してください。

于 2012-07-24T21:31:30.930 に答える