java - 使用线程进度更新 Wicket 页面

标签 java ajax multithreading wicket

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

最佳答案

您可以使用:

http://wicket.apache.org/apidocs/1.4/org/apache/wicket/ajax/AjaxSelfUpdatingTimerBehavior.html

我认为您可以将其附加到任何组件以在一段时间后重新渲染:

component.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(5)));

这将简单地重新渲染,您可以访问您的资源并更新标签。

塞巴斯蒂安

关于java - 使用线程进度更新 Wicket 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12800550/

相关文章:

java - java中的作业完成后如何杀死java中的进程

java - 将字符串传递到输入流

java - 如果无代码 : is it just an intellectual challenge or is it concretely useful?

javascript - 限制向表动态添加的列

java - 用于线程安全的 volatile 关键字

java - 如何避免 N Rooks 问题中 n = 8 的 stackoverflow 错误

php - AJAX - 使用 POST 而不是 GET

javascript - Jquery AJAX DELETE 请求也在同一表单上触发 POST 请求

multithreading - Java EE 响应客户端但继续处理

android - 在android中检测互联网连接