在我的MainProject(Java 8)中,我启动了一个JavaFX 8类。
public void startFX() {
if (isRestartPrintModul() == true) {
fxMain.init();
} else {
setRestartPrintModul(true);
fxMain.main(new String[] {"ohne"});
}
}
这是我的FXMain:
package quality;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
/**
*
* @author pu_laib
*/
public class FXMain extends Application {
private static Stage primaryStage;
@Override
public void init() {
Platform.setImplicitExit(false);
if (getPrimaryStage() != null) {
getPrimaryStage().show();
} else {
}
}
@Override
public void start(Stage primaryStage) {
setPrimaryStage(primaryStage);
// -> Applicationerror: getPrimaryStage().initModality(Modality.NONE);
// -> Applicationerror: getPrimaryStage().initModality(Modality.APPLICATION_MODAL);
Button btn = new Button();
btn.setText("Say 'Hello World'");
btn.setOnAction((ActionEvent event) -> {
System.out.println("Hello World!");
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
getPrimaryStage().setTitle("Hello World!");
getPrimaryStage().setScene(scene);
getPrimaryStage().show();
this.primaryStage.setOnCloseRequest((WindowEvent event) -> {
Platform.exit();
});
}
public static void main(String[] args) {
launch(args);
}
public Stage getPrimaryStage() {
return primaryStage;
}
public void setPrimaryStage(Stage primaryStage) {
this.primaryStage = primaryStage;
}
}
虽然在我看来它已经关闭,但是无法再次从我的MainProject调用打印模块。
一旦PrintModul模块完成,启动就不记得以前运行过了,对吗?
有什么问题?
谢谢。
答案 0 :(得分:2)
Application::launch(args)方法的文档声明:
不得多次调用它或抛出异常。
所以:
Platform.setImplicitExit(false)
,以便即使所有阶段都关闭,JavaFX运行时也将继续运行。Platform.exit()
,但即使您没有积极使用它,也要让JavaFX平台继续运行。start()
方法(或者您在接受要传递的参数的应用程序上提供的其他公共方法)来运行"运行&# 34;应用程序第二次或更多次(如果需要,可能实例化一个新阶段以传递给start方法)。Platform.exit()
以彻底关闭JavaFX系统。您的另一个选择是启动一个新流程,而不是在与MainProject相同的流程中运行JavaFX应用程序,但是,一般来说,我推荐上述方法而不是创建新流程。