我有一个案例,我需要根据在另一个线程中执行的操作来更新一个 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 计时器或以干净的方式访问线程对象来更新标签的值?