JavaFX阻止Node .getParent()调用

时间:2013-09-09 11:19:00

标签: java user-interface javafx-2

使用JavaFX,有没有办法阻止GUI树中的节点获取对其父节点的引用? 鉴于此结构,例如

AnchorPane > BorderPane > Pane

如何通过调用.getParent()来确定最后一个Pane无法访问它的父BorderPane?

我需要这个,因为我从不受信任的代码加载“Pane”,并且不希望它混淆包含它的主窗口组件。

2 个答案:

答案 0 :(得分:0)

解决方案是在BorderPane和不受信任的Pane之间插入中间父级。此父级可以阻止访问其自己的父级。

但是,方法getParentparentPropertyfinal没有标准方式来阻止节点访问其父级。

其他选项可能是让你自己的副本或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,但我不确定这是否可行。