我正在构建一个多窗口和多模块仿真应用程序,我使用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线程中创建。 使用JavaFX创建和管理多窗口应用程序的可行方法是什么?例如,我如何集中JavaFX Application.launch()
电话?
或者,换句话说
在模块中分散JavaFX Application
实现并从main()
类启动模块是一种好习惯,还是最好在main()
中实现它} class,即使我尝试使我的程序模块化?