多窗口JavaFX 8应用程序的体系结构

时间:2015-05-12 08:39:11

标签: java architecture javafx

我正在构建一个多窗口和多模块仿真应用程序,我使用JavaFX进行GUI。

根据我的理解,为了运行JavaFX项目,您需要运行Application.launch( MyApplicationSubclass.class )并使用start(Stage primaryStage)方法中给出的主要阶段开始。 start方法及其后的所有内容都发生在JavaFX线程中。

我的应用是一个多模块应用程序。今天,一个Main类引导程序并启动几个模块(它们是不同的Maven模块),包括负责GUI的模块。在开始时(当我设计当前架构时),我计划只创建一个窗口。因此,一旦加载,GUI模块将进行Application.launch( MyOnlyMainWindow.class )调用,一切都会正常工作。

今天,我想添加一个控制台窗口,在任何模块之前启动,并用于“实时登录”应用程序(通过将System.out流重定向到其他东西之间,转换为TextFlow)。但是使用前面描述的架构,这是不可能的,因为如果我想在GUI模块中保留Application.launch()调用,那么我无法在控制台窗口中进行调用,而控制台窗口不是GUI模块的一部分。也不可能添加另一个管理另一组窗口的GUI模块。

所以我可以想出两种方法来解决这个问题:

  • 以某种方式集中Application.launch()调用,以便每个需要它的类都可以使用它。我不知道怎么做。
  • Main类更改为从javaFx Application类中删除。但这不会让我在JavaFX线程中执行所有模块实例吗?我猜这是一种糟糕的做事方式。或者,如果我决定为模块实例创建其他线程,那么这些线程将在JavaFX线程中创建。
  • (使用Swing作为控制台窗口,虽然它实际上并没有解决我的问题是一种可行的方法......如果我需要在另一个GUI模块中创建另一个窗口怎么办?)

使用JavaFX创建和管理多窗口应用程序的可行方法是什么?例如,我如何集中JavaFX Application.launch()电话?

或者,换句话说

在模块中分散JavaFX Application实现并从main()类启动模块是一种好习惯,还是最好在main()中实现它} class,即使我尝试使我的程序模块化?

0 个答案:

没有答案