मेरे पास यह कोड है जो 10 नीचे से उलटी गिनती प्रदर्शित करता है:

enter image description here

हालांकि शून्य पर पहुंचने के बाद भी यह ऋणात्मक संख्याओं में गिना जाता है। शून्य पर पहुंचने के बाद मैं इसे कैसे रोकूं? ताकि लेबल पर प्रदर्शित होने वाला अंतिम टेक्स्ट 0 हो।

import javafx.animation.Animation;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
import javafx.util.Duration;

public class TestCountdown extends Application {
    private GridPane gridPane;
    private Scene scene;

    private Button button = new Button("Start");
    private CountdownTimer timer = new CountdownTimer();

    @Override
    public void start(Stage applicationStage) {
        gridPane = new GridPane();
        scene = new Scene(gridPane);

        gridPane.add(timer, 0, 1);
        gridPane.add(button, 0, 2);

        timer.setStyle("-fx-font-size: 50;");
        button.setStyle("-fx-font-size: 50;");

        button.setOnAction(actionEvent -> timer.start());

        applicationStage.setScene(scene);
        applicationStage.setFullScreen(true);
        applicationStage.show();
    }
}

class CountdownTimer extends Label {
    private int i = 10;

    private boolean started;

    public CountdownTimer() {
        setText("10");
    }

    public void start() {
        if (started)  {
            return;
        }

        Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(0),
                event -> {
                    setText(String.valueOf(i--));

                    if (i <= 0)  {
                        timeline.stop(); //ERROR: variable timeline might not have been initialized
                    }
                }),
                new KeyFrame(Duration.seconds(1)));

        timeline.setOnFinished(event -> System.out.println("Done!"));
        timeline.setCycleCount(Animation.INDEFINITE);
        timeline.play();
 
        started = true;
    }
}

संपादित करें:

enter image description here

संपादित करें: उपरोक्त कोड अपडेट किया गया है:

 if (i <= 0)  {
                        timeline.stop(); //ERROR: variable timeline might not have been initialized
                    }


अगर-ब्लॉक देता है

ERROR: variable timeline might not have been initialized

त्रुटि

1
parsecer 7 पद 2020, 01:39

1 उत्तर

सबसे बढ़िया उत्तर

कंस्ट्रक्टर में जोड़ने के बजाय, टाइमलाइन शुरू होने के बाद KeyFrames जोड़ने का प्रयास करें।

Timeline timeline = new Timeline();
KeyFrame kf = new KeyFrame(Duration.seconds(0),
        event -> {
            setText(String.valueOf(i--));
            if (i <= 0) {
                timeline.stop();
            }
        });
timeline.getKeyFrames().addAll(kf, new KeyFrame(Duration.seconds(1)));
4
Sai Dandem 7 पद 2020, 02:56