4

我是 javaFx 的新手,看了一点源代码,并且对用于启动应用程序的 Application.launch 函数有疑问。

签名看起来像这样:

public static void launch(Class<? extends Application> appClass, String... args)

我的问题是为什么它看起来不像这样:

 public static void launch(Application app, String... args)

作者试图通过以阶级为论据来达到什么目的?

4

4 回答 4

5

因为实例化Application是一项复杂的任务,FX 开发人员必须对其进行控制。

Application实例化:

  • 需要提前初始化“FX工具包”
  • 桌面、jnlp 和插件模式不同
  • 需要具体时间
  • 应该在特殊的“启动器”线程上调用
  • 应该触发应用程序生命周期事件
  • 应该读取应用程序参数(来自 CLI 或 jnlp 文件)

因此,您只需提供要启动的类名,JavaFX 会完成所有需要的工作,包括为您创建对象。

于 2013-10-27T21:02:33.657 回答
1

我认为其中一个原因是,当您可以直接通过“java my.pkg.MyApp”启动时,它的工作方式更像是它现在可以在 Java8/FX8 中启动,因为它位于类路径中。

要获得明确的答案,您可能不得不在 openjfx 邮件列表中询问。

于 2013-10-27T10:00:05.520 回答
0

可能,他们在幕后使用反射。例如,获取类的名称作为参数,launch()然后调用start()该类的。

与 Stack 上的其他问题一样,人们询问作者试图实现的目标,我们不知道他们做出的决定。

于 2013-10-27T04:06:20.217 回答
0

class 参数表示调用启动的方法的直接封闭类

于 2013-10-27T03:12:31.020 回答