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

Javafx Java FXML应用程序:从外部类调用控制器类中的方法失败,javafx,fxml,Javafx,Fxml,正在开发一个名为EVIF VideoRouter的Java FXML应用程序。然后,主类是VideoRouter.java,控制器类称为VideoRouterFXMLController.java 我在VideoRouterFXMLController.java类中有一个方法,我需要能够从应用程序中的其他外部类调用该方法。基于广泛的搜索和阅读,我将主VideoRouter.java类中的FXML加载程序代码更改为: FXMLLoader EVIFloader = new FXMLLoad

正在开发一个名为EVIF VideoRouter的Java FXML应用程序。然后,主类是VideoRouter.java,控制器类称为VideoRouterFXMLController.java

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

    FXMLLoader EVIFloader = new FXMLLoader(this.getClass().getResource("VideoRouterFXML.fxml"));
    Parent EVIFroot = (Parent) EVIFloader.load();
    VideoRouterFXMLController EVIFcontroller = EVIFloader.getController();
现在,我理解了这个过程,我应该在主VideoRouter.java类中创建一个getter,它返回我在上面创建的EVIFcontroller实例?然后我可以在其他类中使用该getter并在返回的实例中调用该方法

如果是这样的话,我就很难弄清楚getter的确切位置。它是在controller类中,还是在main类中?在这两种情况下,它似乎都无法看到控制器实例以返回它

再一次,我广泛搜索了相关的帖子,发现它们似乎没有解决我遇到的这个具体问题。有什么帮助吗


非常感谢

您已经部分回答了您的问题:在
VideoRouter
类中创建
VideoRouterFXMLController
成员变量,并使用getter公开该变量,然后在加载所提供代码段中的FXML后将其设置为控制器实例


话虽如此,我还是会提出一种不同的方法来解决您的问题,因为由于类之间的高度耦合,这种方法通常不是一种好的设计。我建议作为一种替代方法和一个库来做这件事。

谢谢你的建议,我会研究一下。同时,在主类中,我创建了一个变量“publicstaticvideorouterfxmlcontroller EVIFcontroller”;在它的正下方是一个publicstaticmethod,返回该值。在我上面共享的代码片段中,我更改了最后一行,因此公共变量是由getController填充的。在外部类中,我调用VideoRouterFXMLController EVIFcontroller=VideoRouter.getMainController();EVIFcontroller.populateRemoteSourcesPane();但是方法调用抛出一个空指针异常。思想?再次感谢!能否检查方法调用(
EVIFcontroller.populateRemoteSourcesPane()
)是在设置控制器变量之前还是之后?还有,既然你通过getter公开了它,为什么你会将它作为公共的而不是私有的呢?你是对的,那应该是私有的;更正。剩下的我会再打给你的,谢谢你的洞察力。宾果。当我把它称为测试时,它被称为太早了。我将外部调用映射到GUI上的一个按钮,当我单击该按钮时,我似乎得到了正确的行为。非常感谢。