wait () через некоторое время (true) l oop для имитации часов в Java - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь смоделировать цифровые часы в Java, используя wait () и notify (). Если я запускаю следующий код (ну, на самом деле другой очень простой класс GUI для отображения часов), я получаю исключение Illegal Monitor. Я новичок в Java, так что, вероятно, я неправильно использовал wait () ....

public class JDigitalClock extends JLabel implements Runnable {

private static final long serialVersionUID = 1L;
private boolean stopped = false;
DateTimeFormatter dtf;
LocalDateTime now;

public JDigitalClock() {
    dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
    now = LocalDateTime.now();
    setText(dtf.format(now));
    setFont(new Font("Sans Serif", Font.PLAIN, 70));
    setHorizontalAlignment(SwingConstants.CENTER);
}

@Override
public void run() {
    while (true) {
        sleep();
        while (getStopped())
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        now = LocalDateTime.now();
        setText(dtf.format(now));
    }

}

public void setStopped(boolean stopped) {
    this.stopped = stopped;
    if (!stopped)
        notify();
}

public boolean getStopped() {
    return this.stopped;
}

public void sleep() {
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
...