我正在学习更多关于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();
}
}
答案 0 :(得分:2)
在时间线上致电play()
后,您立即在舞台上致电close()
。关闭JavaFX应用程序的最后一个阶段将关闭JavaFX系统,如果系统中没有其他非守护程序线程(如本例所示),将关闭JVM,退出程序。
您可以通过不关闭JavaFX应用程序中的最后一个阶段或在关闭最后一个阶段之前调用Platform.setImplicitExit(false)
并稍后在不再需要JavaFX时调用Platform.exit()
来修改此行为。
应用程序生命周期行为在Application javadoc中进一步描述。
关于您的示例的一个注意事项:要使时间轴运行,请注释掉window.close()
并确保在按下开始按钮之前在文本字段中输入整数值(或者您的Integer.parseInt
调用将抛出例外)。