从我的 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模块完成,launch就不记得它之前运行过,对吧?
怎么了?
谢谢。
的文档应用程序::启动(参数) https://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html#launch-java.lang.Class-java.lang.String...-方法指出:
不得多次调用它,否则将引发异常。
So:
- 只需调用一次启动即可。
- Invoke Platform.setImplicitExit(false) https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#setImplicitExit-boolean-这样即使所有阶段都关闭,JavaFX 运行时也会继续运行。
- 一旦 JavaFX 应用程序完成其工作,就不要调用Platform.exit() https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#exit--,但让 JavaFX 平台继续运行,即使您没有主动使用它。
- 不要尝试再次启动应用程序,而是调用start() https://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html#start-javafx.stage.Stage-应用程序的方法(或您在应用程序上提供的接受您要传递的参数的其他公共方法)来“运行”应用程序第二次或多次(如果需要,可能会实例化一个新阶段以传递给启动方法)。
- 当所有工作完成后,调用
Platform.exit()
当时彻底关闭 JavaFX 系统。
您的另一个选择是启动一个新进程,而不是在与 MainProject 相同的进程中运行 JavaFX 应用程序,但是,一般来说,我建议使用上面概述的方法,而不是创建新进程。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)