Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaFX provent Node.getParent()调用_Java_User Interface_Javafx 2 - Fatal编程技术网

JavaFX provent Node.getParent()调用

JavaFX provent Node.getParent()调用,java,user-interface,javafx-2,Java,User Interface,Javafx 2,使用JavaFX,是否有一种方法可以防止GUI树中的节点获取对其父节点的引用? 以这种结构为例 AnchorPane > BorderPane > Pane 如何通过调用.getParent()确保最后一个窗格无法访问其父BorderPane 我之所以需要它,是因为我正在从不受信任的代码加载“窗格”,不希望它与包含它的主窗口组件混淆。解决方案是在您的边框窗格和不受信任的窗格之间插入一个中间父级。此父级可以阻止访问其自己的父级 但是,这些方法和步骤是final,没有标准的方法来阻止节

使用JavaFX,是否有一种方法可以防止GUI树中的节点获取对其父节点的引用? 以这种结构为例

AnchorPane > BorderPane > Pane
如何通过调用.getParent()确保最后一个窗格无法访问其父BorderPane


我之所以需要它,是因为我正在从不受信任的代码加载“窗格”,不希望它与包含它的主窗口组件混淆。

解决方案是在您的
边框窗格
和不受信任的
窗格
之间插入一个中间父级。此父级可以阻止访问其自己的父级

但是,这些方法和步骤是
final
没有标准的方法来阻止节点访问其父节点


其他选项可能是获取您自己的副本或允许覆盖
*parent*
方法的jre,或一些基于反射的黑客代码。

您可以使用Java代理API()。这允许您在一个或多个实例周围安装安全管理器,以监视方法调用(除其他外)

还可以使用Thread.currentThread().getStackTrace()获取调用任何方法的人,还可以添加其他节点

另一个选项是fork javafxsource()构建它,直到它工作(很难!),并制作一些补丁,这样您就可以得到自己的实现。。。在这种情况下,请记住对您的更改使用diff/patch,这样您就可以在较新发布的openjfx版本上快速重新应用您的更改。还要尝试自动化构建过程,否则您将被旧版本绊倒。另外,某些Java版本可能存在集成问题。此外,您可能需要在项目中构建和部署多格式动态库:(


或者,您可以调整JVM来替换一些.class文件,而无需重新编译整个JFX,但我不确定这是否可行。

记录它。我讨厌这是一个答案,但正如所回答的那样,实现将允许您运行树。您也可以将整个接口抽象掉,但我同意使用t他的情况。相信你的团队!不幸的是,我不能仅仅记录它。由于Pane扩展了javafx.scene.layout.Region,我可能会使用getParent()的不同实现复制该类,虽然这听起来更像是一个黑客而不是一个真正的解决方案…你处于一个艰难的境地——正如前面提到的,这个方法是最终的,一个被黑客攻击的实现不会修复任何东西。有没有一种方法可以启动第二个场景并对其进行沙箱处理?你可以在Swing GUI中运行JavaFX,这样理论上你就可以从Swing中对其进行沙箱处理。至少你不知道这种方法我记得这是一种单线程方法,所以可能不感兴趣。就我对JavaFX语言的理解而言,“开始一个新的场景”这意味着打开一个新窗口。这可以部分解决问题,因为场景是其树的根。然而,我需要的是能够将外部UI组件加载到我的GUI中,并在不可能的情况下为每个组件创建一个新场景……我建议您可以在JPanel中嵌入一个FX场景。这是一个难题(我在同一个应用程序中运行SWT/Swing/FX有一段时间了——别问了——)你会发现这实际上是一个JPanel,这意味着你可以根据需要“交换它们”。管理线程有点困难,但这不是不可能的。你可以用这种方式对其进行沙箱处理,但这并不优雅。此外,这是一种单向的旅行(Swing包含FX2)上次我检查时,并没有相反的结果。拥有自己的jre副本可能太多了:)在切换到JavaFX之前,我使用的是Swing,正如您所说,我有一个“中间父级”,它覆盖了getParent().我想保留这个对象,但将Swing和JavaFX放在混音中就像一个补丁一样。。。