使用JavaFX,有没有办法阻止GUI树中的节点获取对其父节点的引用? 鉴于此结构,例如
AnchorPane > BorderPane > Pane
如何通过调用.getParent()来确定最后一个Pane无法访问它的父BorderPane?
我需要这个,因为我从不受信任的代码加载“Pane”,并且不希望它混淆包含它的主窗口组件。
答案 0 :(得分:0)
解决方案是在BorderPane
和不受信任的Pane
之间插入中间父级。此父级可以阻止访问其自己的父级。
但是,方法getParent和parentProperty为final
,没有标准方式来阻止节点访问其父级。
其他选项可能是让你自己的副本或jre允许覆盖*parent*
方法,或基于反射的一些hacky代码。
答案 1 :(得分:0)
您可以使用 Java 代理 API ( https://docs.oracle.com/javase/8/docs/api/java/lang/reflect/Proxy.html )。这允许您围绕一个或多个实例安装一个安全管理器,以监控方法调用(除其他外)。
您也可以使用 Thread.currentThread().getStackTrace() 来获取谁调用了任何方法,也可以添加一个额外的节点。
另一个选项是 fork JavaFX 源代码 ( https://openjfx.io/ ) 构建它直到它可以工作(最难最难!https://wiki.openjdk.java.net/display/OpenJFX/Building+OpenJFX )并制作一些补丁,这样你就有了自己的实现......在这种情况下请记住对您的更改使用 diff/patch,以便您可以在较新发布的 openjfx 版本上快速重新应用您的更改。还要尝试自动化构建过程,否则您将被困在旧版本上。也可能某些 Java 版本存在集成问题。此外,您可能需要使用您的项目构建和部署多平台动态库:(
或者您可以调整 JVM 以替换一些 .class 文件,而无需重新编译整个 JFX,但我不确定这是否可行。