如何暂停javafx类

时间:2016-06-12 12:22:50

标签: java eclipse javafx

我正在制作警报,它由两部分组成 在javafx类中创建的动画按钮和通常创建的引擎

我需要的是每当用户按下关闭按钮的动画按钮并启动引擎然后在引擎关闭后会有一段时间然后再次出现动画按钮等等 所以我用了::

notify_me.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            new engine();
            Platform.exit();
        }
    });

为了重复这个过程,我使用了

Timer t = new Timer(0,new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
             while(true){
                 javafx.launch(javafx.class);
                 //some extra code goes here including sleep for
                 //some time and check for engine window state
             }
        }
    });
    t.start();

但我面临两个问题:

  1. some extra code一直没有实施,直到退出平台,
  2. launch()不能多次调用
  3. 那么如何在不使用线程的情况下实现呢?感谢

1 个答案:

答案 0 :(得分:3)

你可能不会使用Thread来解决。我建议不要关闭fx应用程序线程。关闭所有窗口并在延迟后再次显示(部分)它们:

@Override
public void start(Stage primaryStage) {
    Button btn = new Button("Hide me 5 sec");

    // prevent automatic exit of application when last window is closed
    Platform.setImplicitExit(false);

    StackPane root = new StackPane();
    root.getChildren().add(btn);

    Scene scene = new Scene(root);

    primaryStage.setScene(scene);

    // timer should be a daemon (-> not prevent jvm shutdown)
    Timer timer = new Timer(true);

    btn.setOnAction((ActionEvent event) -> {

        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                // make window reappear (needs to happen on the application thread)
                Platform.runLater(primaryStage::show);
            }
        }, 5000l);

        // hide window
        primaryStage.close();
    });

    // allow exiting the application by clicking the X
    primaryStage.setOnCloseRequest(evt -> Platform.exit());

    primaryStage.show();
}