私はこのような再帰的な方法を持っています:
protected void executeAction( TreeItem ti )
{
boolean isChecked = ti.getChecked();
if ( isChecked )
{
Somedata data = (SomeData) ti.getData();
String action = data.getSelectedAction();
ActionManager am = data.getActionManager();
AbstractActionAgent agent = am.getAction( action );
if ( agent != null )
{
agent.updateModel( data ); //Makes a server trips and long computation
}
}
int itemcnt = ti.getItemCount();
TreeItem[] childTrees = ti.getItems();
for ( int i = 0; i < itemcnt; i++ )
{
executeAction( childTrees[i] );
}
}
updateModelメソッドがUIをフリーズするので、Jobを使用してみましたが、問題は、チェックされたTreeItemに対してのみ更新モデルを実行し、チェックされたTreeItemのシーケンスに従う必要があることです。Jobを使用する場合、どのチェック済みTreeIemが最初に処理されるかを制御できません。また、executeActionメソッド全体をジョブに入れようとしましたが、TreeItemにアクセスしているときに無効なスレッドに遭遇しました。
シーケンスを維持し、UIをフリーズさせずに新しいスレッドを起動できるように、いくつかのアイデアが必要です。
ありがとう。