при нажатии на кнопку в у меня должно открыться 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. Заранее спасибо
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>
Структура проекта
Виртуальный выделенный сервер (VDS) становится отличным выбором
Использую SeleniumПодскажите как выбрать картинки которая даёт reCaptcha v2 от Google?
Нужно изменить версии некоторых dependencies в child pom при этом не внося изменений в parent pom от которого child pom наследуетсяКак это сделать? В parent'e dependencies...
Следующий код выдаёт исключение Map style parsing failed при запуске: