Java FXML 应用程序:从外部 class 控制器 class 中调用方法失败

Java FXML Application: unsuccessful calling method in controller class from external class

正在开发一个名为 EVIF VideoRouter 的 Java FXML 应用程序。 Main class 然后是 VideoRouter.java 并且控制器 class 被称为 VideoRouterFXMLController.java.

我在 VideoRouterFXMLController.java class 中有一个方法,我需要能够从应用程序中的其他外部 class 调用该方法。基于广泛的搜索和阅读,我将 VideoRouter.java class 中的 FXML 加载程序代码更改为:

    FXMLLoader EVIFloader = new FXMLLoader(this.getClass().getResource("VideoRouterFXML.fxml"));
    Parent EVIFroot = (Parent) EVIFloader.load();
    VideoRouterFXMLController EVIFcontroller = EVIFloader.getController();

现在,据我了解这个过程,我应该以某种方式在主要 VideoRouter.java class 中创建一个 getter return EVIFcontroller 实例 I上面创建了吗?然后我可以在其他 classes 中使用那个 getter 并调用 returned 实例中的方法?

如果是这样,我很难确定 getter 的确切位置。它是在控制器 class 中,还是在主 class 中?在任何一种情况下,它似乎都无法看到控制器实例以 return 它。

同样,我进行了广泛搜索,发现相关帖子似乎没有解决我遇到的这个具体问题。有帮助吗?

非常感谢!

您已经部分回答了您的问题:在您的 VideoRouter class 中创建 VideoRouterFXMLController 成员变量和一个 getter 来公开它,然后将其设置到控制器在您加载 FXML 之后的实例,就像您提供的代码片段中一样。

话虽如此,我会提出一种不同的方法来解决您的问题,因为由于 class 之间的高耦合,这种方法通常不是一个好的设计。我会推荐 Observer pattern as an alternative approach and EventBus 作为图书馆来做到这一点。