ブール値を使用して int 値にリンクされているタイマーを開始および停止するクラスで単一の関数を使用しようとしています。たとえば、int が 0 のタイマーを開始した場合、それは timer0 になり、3 の場合は timer3 などになります。
私が抱えている問題は、タイマーが正常に開始されているように見えることですが、タイマーを停止するために偽のブール値を送信すると、タイマーが実行され続けるため、タイマーを正しく停止する方法を知る必要があります。
Class.java のコードは次のとおりです。
public void Event(final int value, boolean run, int time){
if(run){
System.out.println(run);
Timer timer = new Timer();
timer.schedule( new TimerTask() {
public void run() {
// The needed code will go here
System.out.println(value + " Event run");
}
}, 0, time); // Every second
} else {
}
}
次に、私の Main.java のコードは次のとおりです。
System.out.println("Start Timer 0 Event");
r.Event(0, true, 1000);
System.out.println("Start Timer 1 Event");
r.Event(1, true, 250);
System.out.println("Start Timer 2 Event");
r.Event(2, true, 250);
r.Event(0, false, 1000); // Not Working as i need
System.out.println("Stop Timer 0 Event");
基本的に、イベントのセットを停止するまで、設定した時間ごとに一連のイベントを繰り返してもらいたいだけで、多くのイベントが一緒に実行される可能性があります。タイマーがこれを行う最良の方法でない場合は、別の方法で問題ありませんが、説明したのと同じ方法で動作する必要があります。
リクエストに応じて、タイマーの実行可能なコードをここに示します。
MyClass.java:
package com.z;
import java.awt.*;
import java.util.*;
import java.util.TimerTask;
public class MyClass {
////////////////////////////////////////////////////////////
//Name: Event (BROKEN)
////////////////////////////////////////////////////////////
public void Event(final int value, boolean run, int time){
Timer timer = new Timer("" + value, true);
if(run){
System.out.println(run);
timer.schedule( new TimerTask() {
public void run() {
// Code here
System.out.println(value + " Event run");
}
}, 0, time); // Every second
}
if (!run) {
timer.cancel();
}
}
}
例.java:
package com.z;
import java.awt.*;
import java.awt.event.*;
public class Example {
public static void main(String[] args) {
MyClass r = new MyClass();
////////////////////////////////////////////////////////////
// Event (BROKEN)
////////////////////////////////////////////////////////////
System.out.println("Start Timer 0 Event");
r.Event(0, true, 1000);
System.out.println("Start Timer 1 Event");
r.Event(1, true, 250);
r.Event(0, false, 1000);
System.out.println("Stop Timer 0 Event");
}
}