有一段历史" 如何在没有主要方法的情况下启动应用程序"问题,大多数陈述的东西都是" 你不能"。我注意到现在可以通过扩展Application
来启动JavaFX应用程序。我一直在使用类似于Application.launch()
的方法,但在这种情况下,我总是将主要方法视为样板代码。所以我又开始寻找答案了。
我发现this answer将我们链接到我们可以学习创建自己的JVM启动器的地方,但遗憾的是文章已不复存在。我花了很长时间寻找任何可能暗示我应该做什么的事情,但没有结果。
我的问题
如何创建自定义JVM启动程序以根据正在扩展的内容启动应用程序?例如,想象一个具有1个声明类的项目:
class MyApplcation extends App {
}
启动项目不需要主要方法,因为它扩展了App。这不是问题,尽管这是我的目标。问题是如何有人创建自定义JVM启动器?
我的猜测是,它会涉及使用某种基础,给我们某种骨架,但我不知道在哪里可以找到这样的东西。
答案 0 :(得分:7)
JavaFX如何实施其应用程序执行模型
由于JEP 153: Enhance the java command-line launcher to launch JavaFX applications的实现,可以启动不包含main方法的JavaFX应用程序。
这是对openjdk启动程序逻辑的修改,以检查要启动的类是否扩展了Application,如果是,则调用JavaFX特定的启动程序,启动Java运行时和关联的线程,创建一个GUI窗口(在JavaFX术语一个阶段),然后创建一个avaFX应用程序的实例,并根据JavaFX application lifecycle rules在应用程序上调用init和start方法。
通过代码跟踪实现:
如何自定义启动器
示例启动命令,假设要启动的目标应用程序是com.mycompany.MyApplication
:
java -Xbootclasspath/p <launcher class directory> com.mycompany.MyApplication