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