2 回答
TA贡献1875条经验 获得超3个赞
了解这FXMLLoader
不是框架,尽管它可以用作框架的基础。没有容器来管理控制器类的实例或加载的根。由 所创建的对象会发生什么FXMLLoader
由应用程序代码决定。
FXML 文件只是描述对象图的 XML 格式的文本文件。简单FXMLLoader
地解释该文件并创建所述对象图1。当然,FXML 格式有一些专门添加的语法来处理 JavaFX 的特定功能(例如添加事件处理程序、绑定等)。
1)加载新的 FXML 时,FXML 使用的类(或者更确切地说,特定控制器)是否也被实例化/加载?
如果您fx:controller
在 FXML 文件的根元素中有一个属性,那么是的,将创建指定控制器类的新实例(默认情况下)。FXML 文件描述的所有对象也是如此。换句话说,每次加载 FXML 文件时,都会FXMLLoader
返回根和控制器的新实例。控制器实例的创建方式可以通过controllerFactory
在FXMLLoader
.
如果您没有fx:controller
属性,那么要么没有控制器实例,要么您需要以编程方式指定一个。在这种情况下,您手动提供控制器实例。
注意:永远不要在不同的 FXML 文件之间共享控制器类,也不要在不同的负载之间共享控制器实例。这样做会引起各种混乱,并且不必要地复杂。也就是说,拥有一个公共抽象类可能是合适的,只要它只有每个子类共有的状态和行为。
2) 执行此操作时,如果实例化/加载了新的 FXML 类,是否从内存中释放了先前的 FXML 类?还是它仍在使用内存。
如本答案开头所述,FXMLLoader
简单地解释 FXML 文件并创建适当的对象图1。一旦它这样做了,创建的对象会发生什么就取决于你了。只要对象可以被任何线程强访问,它们就不会被垃圾回收。
如果你问如果你重用一个实例会发生什么FXMLLoader
,我不完全确定,因为我从来没有尝试过。FXMLLoader
可以这么说,我建议您每次要加载 FXML 文件(或使用静态load(URL)
方法)时都创建一个新实例。
1. 创建对象图后,如果存在控制器,则还将FXMLLoader
注入任何适当的字段并“链接”所有适当的方法。
TA贡献1936条经验 获得超6个赞
这取决于您如何使用 FXMLLoader。有静态和非静态加载方法,还有可以提供控制器实例的方法。最好查看 FXMLLoader 类文档中的各种加载方法。
添加回答
举报