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

一个人如何创建自定义的JVM启动器?

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

一个人如何创建自定义的JVM启动器?

JavaFX如何实现其应用程序执行模型

由于实施了JEP
153
,因此可以启动不包含主要方法的JavaFX应用程序:增强Java命令行启动器以启动JavaFX应用程序。

这是对openjdk启动器逻辑的修改,以检查要启动的类是否扩展了Application,如果是,则调出特定于JavaFX的启动器,该启动器启动Java运行时和相关线程,创建了一个GUI窗口(用JavaFX术语然后,根据JavaFX应用程序生命周期规则,创建avaFX应用程序的实例并在该应用程序上调用init和start方法。

通过代码跟踪实现:

  1. main.c中的JVM调用JLILaunch在java.c
  2. java.c 长相 Java类sun.launcher.LauncherHelper和调用到使用JNI的Java类,调用checkAndLoadMain功能。
  3. 如果要启动的类没有main方法,但是扩展了JavaFX应用程序类,则将创建一个FXHelper类,其中包含启动参数。
  4. 通过JNI将对FXHelper的引用返回到java.c。
  5. java.c 调用的上FXHelper主要方法通过JNI。
  6. FXHelper 使用反射来调用com.sun.javafx.application.LauncherImpl.launchApplication()。
  7. JavaFX LauncherImpl将设置应用程序类加载器,然后首先尝试在应用程序的主类上调用main()方法。
  8. 如果没有main()方法,则JavaFX LauncherImpl将启动JavaFX Launcher线程。
  9. 在启动器线程上,LauncherImpl将在JavaFX应用程序上调用init()。
  10. 在JavaFX应用程序线程上,LauncherImpl将创建一个新的Stage(窗口),并将其传递给应用程序的start方法。
  11. 当最后一个阶段关闭或退出JavaFX平台时,应用程序上的stop方法由LauncherImpl 调用。
  12. 因为没有其他事情要做,所以所有的调用跟踪都将返回并且应用程序将退出。

如何自定义启动器

  1. 取得sun.launcher.LauncherHelper代码的副本。
  2. 忽略代码顶部的警告“这不是Sun Microsystems支持的任何API的一部分。如果编写依赖于此的代码,则后果自负。此代码及其内部接口可能会更改或更改。删除,恕不另行通知。” 并开始修改代码。
  3. 创建您自己的FXHelper版本,它将调用您自己的LauncherImpl而不是JavaFX版本(在目标主应用程序类扩展您的应用程序框架类而不是JavaFX的情况下)。
  4. 编写自己的LauncherImpl,为您的应用程序设置类加载器,创建应用程序类的实例,并在应用程序类型上调用所需的任何启动入口点。
  5. 运行您的应用程序,将被黑化的sun.launcher.LauncherHelper版本和您的LauncherImpl 放在引导类路径上,以便获取它们,而不是JDK附带的默认版本。

示例启动命令,假设要启动的目标应用程序是

com.mycompany.MyApplication

java -Xbootclasspath/p <launcher class directory> com.mycompany.MyApplication


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

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

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