как открыть другое окно через раз? - PullRequest
0 голосов
/ 19 марта 2020

Я работаю над текстовым редактором в javaFX и хочу маленькое окно запуска перед открытием текстового редактора. Я хочу, чтобы окно запуска закрывалось после времени, а затем открывается окно текстового редактора. Проблема в том, что при запуске программы окно запуска не отображается. И когда время истекло, окно TextEditor вскоре показывается, но затем происходит сбой программы и отображается синтаксическая ошибка:

InvocationTargetException

package sample;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));

        MainWindow.openAnother(primaryStage);

        primaryStage.setScene(new Scene(root, 300, 200));
        primaryStage.initStyle(StageStyle.UNDECORATED);
        primaryStage.show();
    }

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

Класс MainWindow:

package sample;

import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class MainWindow {

    public static void openAnother(Stage primaryStage) {
        try {
            Thread.sleep(4345);
            primaryStage.close();
            Fenster(primaryStage);
        } catch(InterruptedException e) { }
    }

    public static void Fenster(Stage nextStage) {
        StackPane root = new StackPane();

        //TODO TextEditor-Code

        Scene scene = new Scene(root);
        nextStage.setScene(scene);
        nextStage.setFullScreen(true);
        nextStage.show();
    }
}

1 Ответ

0 голосов
/ 20 марта 2020

Использовать временные шкалы.

В этом примере запускается этап экрана spla sh (primaryStage), затем через три секунды отображается textEditorStage, а затем через одну секунду этап экрана spla sh закрывается.

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
import javafx.util.Duration;

public class Example extends Application {

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

  @Override
  public void start(Stage primaryStage) throws Exception {
    primaryStage.setScene(new Scene(new AnchorPane(), 200, 200));
    primaryStage.setTitle("Splash Screen");
    primaryStage.setAlwaysOnTop(true);
    primaryStage.show();

    Timeline timeline = new Timeline(new KeyFrame(Duration.millis(3000), event -> {
      Stage textEditorStage = new Stage();
      textEditorStage.setScene(new Scene(new AnchorPane(), 400, 400));
      textEditorStage.setTitle("Text Editor");
      textEditorStage.show();
      Timeline timeline2 = new Timeline(new KeyFrame(Duration.millis(1000), event2 -> {
        primaryStage.close();
      }));
      timeline2.play();
    }));
    timeline.play();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...