栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Shutdownhook上使用JavaFX Application.stop()方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Shutdownhook上使用JavaFX Application.stop()方法

stop()
仅当您通过退出应用程序时
Platform.exit()
(或如果最后一个窗口
Platform.implicitExit
为true
则关闭了该窗口时),
才会调用。
System.exit()
除了退出JavaFX应用程序的常规方法外,如果调用shutdown挂钩,或者如果运行JVM的本机进程被中断(例如,在*
nix之类的OS上的ctrl-C),则将执行关闭挂钩。

请注意,在调用之前在主线程中注册关闭挂钩似乎很重要

Application.launch()

stop()
是在FX Application
Thread上执行的,因此可以安全地访问UI元素(例如,显示“保存未保存的更改”对话框等)。关机挂钩在后台线程中运行,因此无法访问UI元素(实际上,FX
Toolkit可能很早就已在该阶段停止运行)。

因此,选择取决于用例。

为了更具体一点,这里有一个快速测试类:

import javafx.application.Application;import javafx.application.Platform;import javafx.geometry.Insets;import javafx.geometry.Pos;import javafx.scene.Scene;import javafx.scene.control.Button;import javafx.scene.layout.HBox;import javafx.stage.Stage;public class ShutdownTest extends Application {    @Override    public void start(Stage primaryStage) {        Button platformExit = new Button("Platform Exit");        platformExit.setonAction(e -> Platform.exit());        Button systemExit = new Button("System Exit");        systemExit.setonAction(e -> System.exit(0));        Button hang = new Button("Hang");        hang.setonAction(e -> {while(true);});        HBox root = new HBox(5, platformExit, systemExit, hang);        root.setPadding(new Insets(20));        root.setAlignment(Pos.CENTER);        Scene scene = new Scene(root);        primaryStage.setScene(scene);        primaryStage.show();    }    @Override    public void stop() {        System.out.println("Stop");    }    public static void main(String[] args) {        Runtime.getRuntime().addShutdownHook(new Thread(() -> System.out.println("Shutdown hook")));        launch(args);    }}

我在Mac OS X上进行了测试。

通过“平台退出”按钮退出,关闭窗口或右键单击Dock并选择“退出”,将执行

stop()
方法和关闭挂钩。

通过“系统退出”按钮退出,通过强制进程从“活动监视器”退出或通过

killid
从命令行终止进程,将仅执行关闭挂钩。通过按“挂起”按钮然后右键单击Dock并选择“强制退出”来挂起应用程序具有相同的结果。

通过将SIGKILL发送到进程(

kill -9 id
kill -SIGKILLid
从命令行)退出,既不会执行
stop()
方法,也不会执行关闭钩子。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/453364.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号