私は、Eclipse RAPを使用して、次のユースケースを持っている:Eclipse RAPでは、クライアントに現在のUI状態をプッシュ/強制する方法はありますか?
- は
Text
フィールド内のテキストを検索し、 「....検索」
に検索 - 変更
Label
テキストを開始入り - ラベルはに変更する必要にもかかわらず、
Table
問題で実際の検索(非同期)と表示結果をやる「検索.... "実際の検索を開始する前に、"検索.... "に検索が行われた後に変更されます。
- が
Text
フィールドとスタートでテキストを検索入力します。は私が探しているラベルを変更した後、前の探索に、クライアントに現在のUIの状態を/ /力をプッシュ更新する方法です。検索
- は、実際の検索を行うから
Label
テキストは "検索..." - 変更クライアントへ
- プッシュ現在のUI状態(ここではいくつかのサンプルコード
Table
で非同期)、表示結果:
Label statusLabel = new Label(parent, SWT.NONE);
Text searchText = new Text(parent, SWT.SEARCH);
searchText.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// change label
statusLabel.setText("searching...");
// HERE force client update
// start searching
Display.getCurrent().asyncExec(new Runnable() {
@Override
public void run() {
// do actual search
}
});
}
});
を、私は右のUIにアクセスすることはできないのだろうか?例えば更新ステータスラベル、更新結果テーブル。私は "無効なスレッドアクセス"例外に遭遇するだろうと思いますか? –
バックグラウンドスレッドで 'asyncExec'(または' syncExec')を使用して、UI更新コードを実行します。 –
Display.getDefault()とDisplay.getCurrent()は両方ともスレッド内でnullだったので、スレッドを開始する前に変数として格納しなければなりませんでした。 –