別のスレッドで実行された操作に基づいてGUIコンポーネントを更新する必要がある場合があります。このために私は以下を持っています:
WebPageを拡張し、入力フィールド、フォーム、およびラベルを作成するクラス。フォームが送信されると、入力ファイルからのデータを処理するスレッドが開始され、AbstractAjaxTimerBehaviorがページに添付され、スレッドの進行状況/ステータスでラベルが更新されます。
ajaxタイマーのonTimer()メソッドでスレッドオブジェクトにアクセスできないため、作成時にクラスの参照をスレッドに渡します。次に、スレッドはクラスの変数(ステータス)を進行状況で更新します。ajaxタイマーは、ラベルの値をステータス値で更新します。
public int status;
@Override
public void onSubmit ()
{
final Task task = new Task (ViewPage.this);
Thread thread = new Thread (task);
thread.start ();
AbstractAjaxTimerBehavior timer = new AbstractAjaxTimerBehavior (Duration.milliseconds (1000))
{
private static final long serialVersionUID = 1L;
@Override
protected void onTimer (AjaxRequestTarget target)
{
System.out.println ("> Progress [" + status + "]");
if (status == x)
{
// refresh page
setResponsePage (getPage().getClass ());
}
}
};
getPage().add (timer);
}
ajaxタイマーから直接スレッドオブジェクトにアクセスするか、クリーンな方法でラベルの値を更新する方法はありますか?