2

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

AnchorPane > BorderPane > Pane

我如何确定最后一个窗格不能通过调用 .getParent() 访问它的父 BorderPane?

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

4

2 回答 2

0

A solution is to insert an intermediate parent between your BorderPane and the untrusted Pane. This parent could blocks access to its own parent.

But, the methods getParent and parentProperty are final, there is no standard way to prevent a node from accessing to its parent.

Others options could be to get your own copy or the jre allowing to override the *parent* methods, or some hacky code based on reflection.

于 2013-09-09T15:27:38.077 回答
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,但我不确定这是否可能。

于 2021-04-20T11:45:42.743 回答