открытие javaFX окна много раз

478
07 августа 2017, 10:36

при нажатии на кнопку в у меня должно открыться javaFx окно. Первый раз открывается отлично, но после открытия окна 2 раз вылетает Exception in thread "main" java.lang.IllegalStateException: Application launch must not be called more than once. Я знаю откуда это ошибка, и что launch(); можно вызвать только 1 раз. На форумах, где уже отвечали на подобный вопрос предлагают использовать Platform.runLater(()->{}); только у меня вообще не получается это сделать. Мб кто-то сможет написать примерный псевдо код как это делать. Все максимально просто: из первого окна при нажатии на кнопку должно вызывать второе окно, и главное что бы второе окно можно было вызвать много раз. Я не совсем понимаю что нужно вызвать в методе Platform.runLater: либо start(new Stage());, либо launch();, либо primaryStage.show()? Тока не минусуйте карму за возможно дубликат вопроса и тд. :3. Заранее спасибо

Answer 1

Main.java

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application{
    public static void main(String[] args){
        launch();
    }
    @Override
    public void start(Stage primaryStage) throws Exception{
        FXMLLoader loader = new FXMLLoader(getClass().getResource("FirstWindow.fxml"));
        Parent root = loader.load();
        Scene scene = new Scene(root);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

FirstWindowController.java

import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import java.net.URL;
import java.util.ResourceBundle;
public class FirstWindowController implements Initializable{
    public Button btnOpenSecondWindow;
    public Label txtContent;
    @Override
    public void initialize(URL location, ResourceBundle resources){
        btnOpenSecondWindow.setOnAction(e -> {
            Parent root;
            try {
                FXMLLoader loader = new FXMLLoader(getClass().getResource("SecondWindow.fxml"));
                root = loader.load();
                Stage stage = new Stage();
                stage.setTitle("Second window");
                Scene scene = new Scene(root);
                stage.setScene(scene);
                stage.initOwner(btnOpenSecondWindow.getScene().getWindow());
                //SecondWindowController controller = loader.getController();
                //controller.someMethodCall();
                stage.showAndWait();
            } catch (Exception exc) {
                exc.printStackTrace();
            }
        });
    }
}

SecondWindowController.java

import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import java.net.URL;
import java.util.ResourceBundle;
public class SecondWindowController implements Initializable{
    public Label txtContent;
    @Override
    public void initialize(URL location, ResourceBundle resources){
        //no-op
    }
}

FirstWindow.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.VBox?>
<VBox xmlns="http://javafx.com/javafx"
      xmlns:fx="http://javafx.com/fxml"
      fx:controller="FirstWindowController"
      prefHeight="200.0"
      prefWidth="200.0">
    <Label fx:id="txtContent"
           text="I am the first window!"/>
    <Button fx:id="btnOpenSecondWindow"
            text="Open second"/>
</VBox>

SecondWindow.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.Pane?>
<Pane xmlns="http://javafx.com/javafx"
      xmlns:fx="http://javafx.com/fxml"
      fx:controller="SecondWindowController"
      prefHeight="150.0"
      prefWidth="150.0">
    <Label fx:id="txtContent"
           text="I am the SECOND window!"/>
</Pane>

Структура проекта

READ ALSO
Обход reCaptcha v2 картинки Slenium Java

Обход reCaptcha v2 картинки Slenium Java

Использую SeleniumПодскажите как выбрать картинки которая даёт reCaptcha v2 от Google?

343
Как изменить версию dependency в child pom не меняя parent pom (maven)

Как изменить версию dependency в child pom не меняя parent pom (maven)

Нужно изменить версии некоторых dependencies в child pom при этом не внося изменений в parent pom от которого child pom наследуетсяКак это сделать? В parent'e dependencies...

317
Кривые идентификаторы в jsf

Кривые идентификаторы в jsf

Ребята доброе время сутокJSF генерирует свои айдишники поверх моих

361
Не парсится стиль Google Maps

Не парсится стиль Google Maps

Следующий код выдаёт исключение Map style parsing failed при запуске:

307