package cc.ptt;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
public class CountDownDemo {
public static void main
(String[] args
) { frm.
setDefaultCloseOperation(JFrame.
DISPOSE_ON_CLOSE);
messageBar.setFont(messageBar.getFont().deriveFont(48f));
frm.getContentPane().add(messageBar);
final CountDown counter = new CountDown();
counter.setTickListener(new CountDown.OnTickListener() {
@Override
public void onTick(int seconds) {
// setText method is thread-safe
messageBar.
setText(String.
format("%d 秒", seconds
)); if (seconds <= 0) {
public void run() {
start.setEnabled(true);
}
});
}
}
});
@Override
start.setEnabled(false);
counter.asyncStart(10);
// counter.syncStart(10);
}
});
frm.setSize(400, 400);
frm.setLocationRelativeTo(null);
frm.setVisible(true);
}
}
cGFja2FnZSBjYy5wdHQ7CgppbXBvcnQgamF2YS5hd3QuQm9yZGVyTGF5b3V0OwppbXBvcnQgamF2YS5hd3QuZXZlbnQuQWN0aW9uRXZlbnQ7CmltcG9ydCBqYXZhLmF3dC5ldmVudC5BY3Rpb25MaXN0ZW5lcjsKCmltcG9ydCBqYXZheC5zd2luZy5Cb3JkZXJGYWN0b3J5OwppbXBvcnQgamF2YXguc3dpbmcuSkJ1dHRvbjsKaW1wb3J0IGphdmF4LnN3aW5nLkpGcmFtZTsKaW1wb3J0IGphdmF4LnN3aW5nLkpMYWJlbDsKaW1wb3J0IGphdmF4LnN3aW5nLlN3aW5nVXRpbGl0aWVzOwoKcHVibGljIGNsYXNzIENvdW50RG93bkRlbW8gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewoJCUpGcmFtZSBmcm0gPSBuZXcgSkZyYW1lKCJEZW1vIGZvciBKYXZhQHB0dCIpOwoJCWZybS5zZXREZWZhdWx0Q2xvc2VPcGVyYXRpb24oSkZyYW1lLkRJU1BPU0VfT05fQ0xPU0UpOwoJCQoJCWZpbmFsIEpMYWJlbCBtZXNzYWdlQmFyID0gbmV3IEpMYWJlbCgiIiwgSkxhYmVsLkNFTlRFUik7CgkJbWVzc2FnZUJhci5zZXRCb3JkZXIoQm9yZGVyRmFjdG9yeS5jcmVhdGVMb3dlcmVkQmV2ZWxCb3JkZXIoKSk7CgkJbWVzc2FnZUJhci5zZXRGb250KG1lc3NhZ2VCYXIuZ2V0Rm9udCgpLmRlcml2ZUZvbnQoNDhmKSk7CgkJZnJtLmdldENvbnRlbnRQYW5lKCkuYWRkKG1lc3NhZ2VCYXIpOwoJCQoJCWZpbmFsIEpCdXR0b24gc3RhcnQgPSBuZXcgSkJ1dHRvbigi6ZaL5aeL5YCS5pW4IDEwIOenkiIpOwoJCWZybS5nZXRDb250ZW50UGFuZSgpLmFkZChzdGFydCwgQm9yZGVyTGF5b3V0LlNPVVRIKTsKCQlmaW5hbCBDb3VudERvd24gY291bnRlciA9IG5ldyBDb3VudERvd24oKTsKCQljb3VudGVyLnNldFRpY2tMaXN0ZW5lcihuZXcgQ291bnREb3duLk9uVGlja0xpc3RlbmVyKCkgewoJCQlAT3ZlcnJpZGUKCQkJcHVibGljIHZvaWQgb25UaWNrKGludCBzZWNvbmRzKSB7CgkJCQkvLyBzZXRUZXh0IG1ldGhvZCBpcyB0aHJlYWQtc2FmZQoJCQkJbWVzc2FnZUJhci5zZXRUZXh0KFN0cmluZy5mb3JtYXQoIiVkIOenkiIsIHNlY29uZHMpKTsKCQkJCWlmIChzZWNvbmRzIDw9IDApIHsKCQkJCQlTd2luZ1V0aWxpdGllcy5pbnZva2VMYXRlcihuZXcgUnVubmFibGUoKSB7CgkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKCQkJCQkJCXN0YXJ0LnNldEVuYWJsZWQodHJ1ZSk7CgkJCQkJCX0KCQkJCQl9KTsKCQkJCX0KCQkJfQoJCX0pOwoJCXN0YXJ0LmFkZEFjdGlvbkxpc3RlbmVyKG5ldyBBY3Rpb25MaXN0ZW5lcigpIHsKCQkJQE92ZXJyaWRlCgkJCXB1YmxpYyB2b2lkIGFjdGlvblBlcmZvcm1lZChBY3Rpb25FdmVudCBlKSB7CgkJCQlzdGFydC5zZXRFbmFibGVkKGZhbHNlKTsKCQkJCWNvdW50ZXIuYXN5bmNTdGFydCgxMCk7Ci8vCQkJCWNvdW50ZXIuc3luY1N0YXJ0KDEwKTsKCQkJfQoJCX0pOwoJCQoJCWZybS5zZXRTaXplKDQwMCwgNDAwKTsKCQlmcm0uc2V0TG9jYXRpb25SZWxhdGl2ZVRvKG51bGwpOwoJCWZybS5zZXRWaXNpYmxlKHRydWUpOwoJfQp9Cg==