How to call the launch() more than once in java i am given an exception as "ERROR IN MAIN:java.lang.IllegalStateException: Application launch must not be called more than once"
I have create rest cleint in my java application when request comes it call javafx and opening webview after completing webview operarion am closing javafx windows using Platform.exit() method. when second request comes am getting this error how to reslove this error.
JavaFx Application Code:
public class AppWebview extends Application {
public static Stage stage;
@Override
public void start(Stage _stage) throws Exception {
stage = _stage;
StackPane root = new StackPane();
WebView view = new WebView();
WebEngine engine = view.getEngine();
engine.load(PaymentServerRestAPI.BROWSER_URL);
root.getChildren().add(view);
engine.setJavaScriptEnabled(true);
Scene scene = new Scene(root, 800, 600);
stage.setScene(scene);
engine.setOnResized(new EventHandler<WebEvent<Rectangle2D>>() {
public void handle(WebEvent<Rectangle2D> ev) {
Rectangle2D r = ev.getData();
stage.setWidth(r.getWidth());
stage.setHeight(r.getHeight());
}
});
JSObject window = (JSObject) engine.executeScript("window");
window.setMember("app", new BrowserApp());
stage.show();
}
public static void main(String[] args) {
launch(args);
}
RestClient Method: Calling to JavaFX application
// method 1 to lanch javafx
javafx.application.Application.launch(AppWebview.class);
// method 2 to lanch javafx
String[] arguments = new String[] {"123"};
AppWebview .main(arguments);
try this, I tried this and found successful
You can't call
launch()
on a JavaFX application more than once, it's not allowed.From the javadoc:
Suggestion for showing a window periodically
Application.launch()
once.Platform.setImplicitExit(false)
, so that JavaFX does not shutdown automatically when you hide the last application window.show()
call inPlatform.runLater()
, so that the call gets executed on the JavaFX application thread.If you are mixing Swing you can use a JFXPanel instead of an Application, but the usage pattern will be similar to that outlined above.
Wumpus Sample
Update, Jan 2020
Java 9 added a new feature called
Platform.startup()
, which you can use to trigger startup of the JavaFX runtime without defining a class derived fromApplication
and callinglaunch()
on it.Platform.startup()
has similar restrictions to thelaunch()
method (you cannot callPlatform.startup()
more than once), so the elements of how it can be applied is similar to thelaunch()
discussion and Wumpus example in this answer.For a demonstration on how
Platform.startup()
can be used, see Fabian's answer to How to achieve JavaFX and non-JavaFX interaction?