私は2つの入れ子になったwhileループを持っています。内側のループを止めれば、内側が動いているかどうかを調べます。私は、タイマーを開始し、停止するメソッドがありますが、私はタイマーを停止し、それを再起動する(真にブール値を設定する)タイマーを開始しないでください。 innerが一時停止している間にSystem.out.println( "test")のような外部ループでいくつかの操作を実行すると、正常に動作します。ここwhileループが動作しないのはなぜですか?
@Override
protected synchronized Void call() throws Exception {
while(true){
System.out.println();
while(play){
System.out.println(play);
secondCounter++;
seconds++;
if(seconds>59){
secondCounter=0;
seconds=0;
minutes++;
}
if(minutes>59){
minutes=0;
hours++;
}
System.out.println("Task sekunden: "+seconds);
setTime();
Thread.sleep(1000);
}
}
}
は完全なクラスである:
public class TimerTask extends Task<Void>{
private Label timer;
private boolean play=false;
private int secondCounter;
private int seconds;
private int minutes;
private int hours;
public TimerTask(Label timer){
this.timer=timer;
}
@Override
protected synchronized Void call() throws Exception {
while(true){
while(play){
System.out.println(play);
secondCounter++;
seconds++;
if(seconds>59){
secondCounter=0;
seconds=0;
minutes++;
}
if(minutes>59){
minutes=0;
hours++;
}
System.out.println("Task sekunden: "+seconds);
setTime();
Thread.sleep(1000);
}
}
}
public int getMinutes(){
int time;
time=minutes + (hours*60);
if(seconds>30){
time++;
}
return time;
}
public void test(){
String secondsTime;
String minutesTime;
String hoursTime;
if(seconds<10){
secondsTime="0"+seconds;
}else{
secondsTime=String.valueOf(seconds);
}
if(minutes<10){
minutesTime="0"+minutes;
}else{
minutesTime=String.valueOf(minutes);
}
if(hours<10){
hoursTime="0"+hours;
}else{
hoursTime=String.valueOf(hours);
}
System.out.println(hoursTime+":"+minutesTime+":"+secondsTime);
}
public void setTime(){
String secondsTime;
String minutesTime;
String hoursTime;
if(seconds<10){
secondsTime="0"+seconds;
}else{
secondsTime=String.valueOf(seconds);
}
if(minutes<10){
minutesTime="0"+minutes;
}else{
minutesTime=String.valueOf(minutes);
}
if(hours<10){
hoursTime="0"+hours;
}else{
hoursTime=String.valueOf(hours);
}
Platform.runLater(() -> {timer.setText(hoursTime+":"+minutesTime+":"+secondsTime);});
}
public void stop(){
this.play=false;
System.out.println("Stop: "+play);
}
public void start(){
this.play=true;
System.out.println("Start: "+play);
}
public void reset(){
this.play=false;
secondCounter=0;
seconds=0;
minutes=0;
hours=0;
timer.setText("00:00:00");
System.out.println("Reset: "+play);
}
}
「再生」とは何ですか、どのように設定していますか? – user2004685
あなたの質問は非常に不明です。コードを表示し、得られる出力と期待している出力を表示します。 '遊び 'とは何ですか?どのように定義されていますか?あなたは本当に、再生が間違っているときに出力に新しい行を書き込むビジーなループを本当にしたいですか? –
playはブール値で、パブリックセッターとゲッターメソッドで設定します。 – Steinliiippp