Java 时钟不是';t起动

Java 时钟不是';t起动,java,Java,我用JavaFX8写了一个小时钟。在我的GUI上,我有两个按钮。一个按钮应启动计时器,另一个按钮应暂停计时器。但每当我按下“开始”时,什么都没有发生。当我删除整个if()子句时,我可以通过thread.start启动计时器并更新我的GUI。我想我的呼叫如果(正在运行)没有按我所希望的方式工作。 我感谢任何帮助 My Window.java(主应用程序) My Clock.java /* * To change this license header, choose License He

我用JavaFX8写了一个小时钟。在我的GUI上,我有两个按钮。一个按钮应启动计时器,另一个按钮应暂停计时器。但每当我按下“开始”时,什么都没有发生。当我删除整个
if()
子句时,我可以通过
thread.start
启动计时器并更新我的GUI。我想我的呼叫
如果(正在运行)
没有按我所希望的方式工作。 我感谢任何帮助

My Window.java(主应用程序)

My Clock.java

    /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package logic;

import gui.Window;
import java.util.Observable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Platform;

/**
 *
 * @author
 */
public class Clock extends Observable implements Runnable {

    private String zeit = "";
    private int sek;
    private boolean isRunning = false;

    public Clock() {

    }

    public void setZeit() {
        zeit = "" + sek;
    }

    public String getZeit() {
        return zeit;
    }
    
    public void setRunning(boolean running){
        this.isRunning = running;
    }
    
    public boolean isRunning(){
        return isRunning;
    }

    public int getSek() {
        return sek;
    }

    @Override
    public void run() {
        while (true) {
            if (isRunning()) {
                try {
                    sek++;
                    setZeit();
                    System.out.println(zeit);
                    this.setChanged();
                    this.notifyObservers();
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    //TODO
                }
            }
        }
    }
}

提前谢谢

您是否尝试使方法
isRunning
setRunning
同步?您是否也研究过jdk中内置的东西?我不知道您的要求,但是javafx有
时间线
动画计时器
,java也有
java.util.Timer
使方法同步正在工作。你能解释一下为什么会这样吗?是的,我在寻找jdk内置的东西,但我想创造一些新东西来训练我的技能我一点也不知道,是的,
运行
是两者之间的共享资源,但是失去同步会使时钟线程读取
运行
的旧值,这一点的影响是微不足道的,它不应该导致这样的结果。我在“调试”模式下启动程序,没有设置任何断点,我按下开始按钮,什么也没发生,我在
上设置了一个断点,如果(isRunning()
,它点击了,我删除它,让我的程序继续运行,它工作!!!!!停止按钮也工作!!!!!
    /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package logic;

import gui.Window;
import java.util.Observable;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Platform;

/**
 *
 * @author
 */
public class Clock extends Observable implements Runnable {

    private String zeit = "";
    private int sek;
    private boolean isRunning = false;

    public Clock() {

    }

    public void setZeit() {
        zeit = "" + sek;
    }

    public String getZeit() {
        return zeit;
    }
    
    public void setRunning(boolean running){
        this.isRunning = running;
    }
    
    public boolean isRunning(){
        return isRunning;
    }

    public int getSek() {
        return sek;
    }

    @Override
    public void run() {
        while (true) {
            if (isRunning()) {
                try {
                    sek++;
                    setZeit();
                    System.out.println(zeit);
                    this.setChanged();
                    this.notifyObservers();
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    //TODO
                }
            }
        }
    }
}