事件后,时间轴循环不会启动

时间:2015-12-16 22:52:40

标签: javafx

我正在学习更多关于javaFx,特别是时间轴,但我已经成为一个问题了。 按下“开始”按钮后,时间轴循环不会启动。 我没有得到任何错误,所以我不知道为什么时间轴循环永远不会开始。

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

/**
 *
 */
public class StartServer extends Application {

    Stage window;

    public static void main(String[] args){
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        window = primaryStage;
        TextField txtPort = new TextField();
        Label lblPort = new Label("Number");
        Button startServer = new Button("Start");

        startServer.setOnAction(e-> startServer(Integer.parseInt(txtPort.getText())));

        GridPane gridPane = new GridPane();
        gridPane.add(lblPort,0,0);
        gridPane.add(txtPort,1,0);
        gridPane.add(startServer,0,1,2,1);
        gridPane.setHgap(10);
        gridPane.setVgap(10);
      // startServer(8888);

        Scene scene = new Scene(gridPane, 200,100);
        window.setScene(scene);
        window.show();
    }

    private void startServer(int port){
        System.out.println("Timelineloop");

            Timeline time = new Timeline( new KeyFrame(      Duration.millis(2500),k->{
                System.out.println("Timelineloop");

            }));
            time.setCycleCount(Timeline.INDEFINITE);
            time.play();
        window.close();
    }
}

1 个答案:

答案 0 :(得分:2)

在时间线上致电play()后,您立即在舞台上致电close()。关闭JavaFX应用程序的最后一个阶段将关闭JavaFX系统,如果系统中没有其他非守护程序线程(如本例所示),将关闭JVM,退出程序。

您可以通过不关闭JavaFX应用程序中的最后一个阶段或在关闭最后一个阶段之前调用Platform.setImplicitExit(false)并稍后在不再需要JavaFX时调用Platform.exit()来修改此行为。

应用程序生命周期行为在Application javadoc中进一步描述。

关于您的示例的一个注意事项:要使时间轴运行,请注释掉window.close()并确保在按下开始按钮之前在文本字段中输入整数值(或者您的Integer.parseInt调用将抛出例外)。