什么是addNotify();?

时间:2013-03-20 09:40:42

标签: java methods override method-overriding

我试图找到addNotify()的外行定义,但我无法使用Google得到任何答案。

据我所知,在课堂上覆盖addNotify()时,我应该致电super.addNotify(); 然后再做其他事情。

我的问题是,addNotify()会自动运行吗?它是什么目的以及当我覆盖它时会发生什么?此外,为什么我要覆盖这个方法呢?

感谢的。

3 个答案:

答案 0 :(得分:4)

  

我的问题是,addNotify()会自动运行吗?

是。准确的地点和时间取决于AWT实施的内部。

  

它的目的是什么

javadoc中所述。它是非常低级别的东西,是将AWT世界连接到本地窗口世界的“粘合剂”的一部分。 (我故意是高级和模糊的。如果你想要了解细节,请下载并阅读OpenJDK源代码。)

  

当我覆盖它时会发生什么

你可能会打破AWT: - )

  

此外,为什么我要覆盖此方法?

我想不出这样做的好理由......除非你试图将AWT移植到不同的操作系统或不同的本机窗口系统。

答案 1 :(得分:1)

Component#addNotify()java.awt.Component类中的方法。 API中所述的此方法的目的:

  

通过将此组件连接到本机屏幕,可以显示此组件   资源。此方法由工具包在内部调用,并且应该   不是由程序直接调用。

答案 2 :(得分:1)

方法addNotify() / removeNotify()是AWT提供的唯一钩子,我们可以正确地销毁和重新创建OpenGL上下文,因为底层的本机窗口小部件正在被销毁。
低级组件使用addNotify()与操作系统上的底层对等方进行交互,以便真正发生一些事情,而不仅仅是屏幕上的漂亮图片。
最好避免使用此方法。