如何再次启动外部 JavaFX 程序?即使 JavaFX 程序以 Platform.Exit 结束,Launch 也会阻止这种情况发生

2024-04-06

从我的 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:

  1. 只需调用一次启动即可。
  2. Invoke Platform.setImplicitExit(false) https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#setImplicitExit-boolean-这样即使所有阶段都关闭,JavaFX 运行时也会继续运行。
  3. 一旦 JavaFX 应用程序完成其工作,就不要调用Platform.exit() https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html#exit--,但让 JavaFX 平台继续运行,即使您没有主动使用它。
  4. 不要尝试再次启动应用程序,而是调用start() https://docs.oracle.com/javase/8/javafx/api/javafx/application/Application.html#start-javafx.stage.Stage-应用程序的方法(或您在应用程序上提供的接受您要传递的参数的其他公共方法)来“运行”应用程序第二次或多次(如果需要,可能会实例化一个新阶段以传递给启动方法)。
  5. 当所有工作完成后,调用Platform.exit()当时彻底关闭 JavaFX 系统。

您的另一个选择是启动一个新进程,而不是在与 MainProject 相同的进程中运行 JavaFX 应用程序,但是,一般来说,我建议使用上面概述的方法,而不是创建新进程。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何再次启动外部 JavaFX 程序?即使 JavaFX 程序以 Platform.Exit 结束,Launch 也会阻止这种情况发生 的相关文章

  • JavaFX SimpleObjectProperty 与 SimpleTProperty

    使用有什么区别 简单字符串属性 vs SimpleObjectProperty or 简单整数属性 vs SimpleObjectProperty 除了返回包装器而不是原始类型之外 无论如何它都可以自动转换 API 为特定类型添加了附加功能
  • 如何通过 while/for 循环创建类的许多精确实例(以访问其属性)?

    我正在尝试使用 pygame 制作 atari 突破风格游戏 并且我希望可破坏的块是具有某些属性的对象 我可以随着游戏的进行而更改这些属性 因此 我创建了一个 Block 类和一个后续函数 该函数多次循环遍历该类 将实例分配给列表 我遇到的
  • 拖动滑块时更新标签

    我正在使用一个Slider在我的 javaFX 项目中 我有一个Label当我移动滑块时它会更新 我想要Label在我拖动时进行更新Slider不仅是当阻力被放下时 这是我的代码 betSlider valueChangingPropert
  • Eclipse 插件导出时出现错误:“无法解析导入 javafx.embed.swt”

    我正在尝试导出 Eclipse 插件 这只是我从此处的示例创建的一个 Eclipse 视图 http help eclipse org mars index jsp nav 2F2 0 http help eclipse org mars
  • 在 JavaFX 中使用 MouseEvent 和 MouseClicked 选择并移动 Canvas 图像

    我有一个应用程序的示例 用于绘制图片GraphicsContext并如下图所示工作 问题是select and move只有blue circle水平地与Canvas MouseEvent and MouseClicked public c
  • JavaFX GridPane:如果内容被禁用且不可见则缩小

    如果 GridPane 行的内容既禁用又不可见 是否可以缩小该行 当我将节点设置为disable true和visible false时 单元格仍然占用空间 如果我有 8 行 并且只有第一行和最后一行可见 我不希望空行占用太多空间 好像只有
  • Gridpane 中的 JavaFx 图像会大幅降低性能

    我想创建一个 GridPane 嵌套在 ScrollPane 中 在其中动态添加单元格到 GridPane 每个单元格都包含一个带有背景图像的 VBox 一些标签和一个复选框 问题是 GridPane 可以包含数百个 VBox 在我的例子中
  • 如果 vbs 脚本崩溃,请重新启动它

    我正在尝试制作一个 vb 脚本 如果它崩溃 它将重新启动另一个 vb 脚本 我搜索了又搜索 但我得到的只是如何重新启动程序 并且由于 vb 脚本是后台进程 因此当您在 Win32 Process 中搜索时它不起作用 这是我的代码 set S
  • 条件绑定

    我是 JavaFx 新手 我正在创建一个应用程序 用户必须填写一些表单 并且我想使用绑定 预先验证 它们 简单的事情 比如所有元素都不能为空 或者其中一些元素只能包含数字 这是我到目前为止所拥有的 saveBtn disableProper
  • 带有对象的 Javafx 可编辑组合框

    我刚刚开始学习 Java Fx 我有一个装满物体的组合框 我处理了 toString 方法 我可以看到我想要在屏幕上显示的名称 但现在我想让它可编辑 用户将输入自己的文本 ComboBox 将创建一个新对象并将该文本放入正确的字段中 我知道
  • 可以将矩形设置为显示边框吗?

    以下应用 public class Temp extends Application Override public void start Stage primaryStage StackPane root new StackPane Re
  • RichTextFx CodeArea 中的文本背景颜色

    我正在使用 RichTextFx CodeArea 来突出显示我的代码 我想更改某些关键字的文本背景颜色并使用下面的 css parameter rtfx background color yellow But it s changes b
  • JavaFX 中按下按钮的样式

    我有一个Button in my FXML文件 我在下面给它一个样式CSS button fx background color linear gradient ff5400 be1d00 fx background radius 30 f
  • JavaFX 8 DatePicker 风格

    如何更改JavaFX 8中DatePicker中日历的样式 我查看了 modena 文件中的所有默认样式 但没有找到 DatePicker 的类 有人知道该怎么做吗 例如 将标题颜色更改为蓝色 默认样式如下 您可以找到以下的 cssDate
  • 如何根据鼠标位置显示工具提示? - JavaFX

    我有一个stackPane 充满一个圆圈和几条线 我想在将鼠标悬停在 StackPane 上时显示工具提示 并且工具提示应包含X Y coords鼠标的 我知道如何获取鼠标的坐标 但我无法找到显示工具提示的方法 你们中有人能帮我吗 安舒尔
  • JavaFX ProgressBar:如何添加动画?

    我创建了一个进度条并更改了进度条颜色 是否可以像 bootstrap 动画进度条一样向进度条添加动画 这是示例 链接在这里 http getbootstrap com components progress animated 实际上 我找到
  • AWS ECS 重启策略

    我检查了在 ECS 集群中运行的一个 docker 容器 它的重启策略为空白 HostConfig RestartPolicy Name 我不确定 ECS 在发生故障时会做什么 但我想将策略更改为在实例中运行的 cmd 失败时重新启动容器实
  • 将两个表视图绑定在一起,以便它们同步滚动

    我想将两个表视图绑定在一起 以便它们同步滚动 我怎么做 我无法找到如何访问表格视图的滚动条 我做了一个CSS hack来将Tableview与外部滚动条绑定 一个滚动条控制两个表格视图 我的想法的概述 创建两个表视图 制作一个垂直滚动条 在
  • JavaFX 中 ImageView 的顺序转换

    我已经看过了如何在 javafx 2 1 中等待转换结束 https stackoverflow com questions 11188018 how to wait for a transition to end in javafx 2
  • 尝试让 GUI 使用 arrayList 在牌组中打印随机卡

    所以我目前正在用java开发一个卡牌战争游戏 我试图让 GUI 屏幕使用 arrayList 从一组卡片图像中打印 2 张随机卡片 必须使用它进行分配 卡片图像文件名为 1 png 2 png 52 png 并存储在 image card

随机推荐