Alternative 3: Timer (No Suspend or Resume)

From Documentation
Revision as of 10:35, 19 January 2022 by Hawk (talk | contribs) (correct highlight (via JWB))
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
DocumentationZK Developer's GuideAdvanced ZKLong OperationsAlternative 3: Timer (No Suspend or Resume)
Alternative 3: Timer (No Suspend or Resume)

Stop.png This documentation is for an older version of ZK. For the latest one, please click here.

It is possible to implement a long operation without suspend and resume. It is useful if the synchronization codes are going too complex to debug.

The idea is simple. The working thread save the result in a temporary space, and then the onTimer event listener pops the result to the desktop.

 package test;

import java.util.List;

import org.zkoss.zk.ui.Desktop;
import org.zkoss.zul.Label;
 public class WorkingThread2 extends Thread {
     private static int _cnt;
     private final Desktop _desktop;
     private final List _result;
     public WorkingThread2(Desktop desktop, List result) {
         _desktop = desktop;
         _result = result;
     public void run() {
         _result.add(new Label("Execute "+ ++_cnt));

Then, you append the labels in the onTimer event listener.

<window id="main" title="Working Thread2">
         int numPending = 0;
         List result = Collections.synchronizedList(new LinkedList());
    <button label="Start Working Thread">
        <attribute name="onClick">
             new test.WorkingThread2(desktop, result).start();
    <timer id="timer" running="false" delay="1000" repeats="true">
        <attribute name="onTimer">
             while (!result.isEmpty()) {
             if (numPending == 0) timer.stop();

Last Update : 2022/01/19

Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.