Da SchedulerHandle endgültig ist und Sie es nicht sofort definiert haben, warnt Ihr Compiler Sie, dass es in der run() -Methode möglicherweise nicht initialisiert wurde. einfach tun:
final ScheduledFuture SchedulerHandle = ExtractorTimer.scheduleWithFixedDelay (...
Update: Das war einfach falsch Mal sehen, Sie wollen alle 60 DB.buildConnection() aufrufen. Sekunden, bis True zurückgegeben wird Leider können Sie nicht auf SchedulerHandle verweisen, das von ScheduleWithFixedDelay() in dem Runnable zurückgegeben wird, mit dem Sie die Methode aufrufen, da das Runnable zuerst definiert werden muss - aber es nicht weiß, was SchedulerHandle ist t existiert an diesem Punkt
So ein alternativer Weg, um den Prozess der Aufhebung ist Ihr ScheduledExecutorService zu beenden, etwa so:
ScheduledExecutorService ExtractorTimer=Executors.newScheduledThreadPool(1);
final ScheduledFuture<?> SchedulerHandle;
SchedulerHandle =ExtractorTimer.scheduleWithFixedDelay(
new Runnable() {
public void run() {
if(DB.buildConnection()){
ExtractorTimer.shutdown();
}
}
},0, 60,java.util.concurrent.TimeUnit.SECONDS);
Aber beachten Sie, dass, wenn Sie dies tun, können Sie nicht ExtractorTimer Wiederverwendung und jede gegebene Aufgabe wird abgebrochen ! Future schedule() s wird ebenfalls nicht ausgeführt. Die einzige Möglichkeit, es wieder nutzbar zu machen, besteht darin, einen neuen ScheduledExecutorService zu erstellen - das ist der Nachteil dieses Ansatzes.
Wenn Sie mit ExtractorTimer nur für diese eine Aufgabe in Ordnung sind, sollte alles in Ordnung sein.
Ich sehe keine Variable namens 'ScheduledFuture' in Ihrem Code. (BTW, sollten Sie vermeiden, Variablen mit dem ersten Buchstaben als Kapital zu benennen, weil sie leicht mit Klassennamen verwechselt werden können.) –
Mein Punkt ist, dass Sie uns wahrscheinlich nicht die tatsächliche Fehlermeldung zeigen ... –
Entschuldigung. war ein Tippfehler. Ich habe die Frage bearbeitet. – RYN