我应该担心在Swing中泄漏“this”指针吗?

时间:2012-02-07 22:00:58

标签: java swing

我最近(在基于C#的类中)了解到,在对象的构造函数中注册事件侦听器有时会被认为是危险的,因为在对象完全初始化之前,这些事件侦听器会被赋予对该对象的引用,并且可以(在至少在理论上)在构造完成之前尝试访问对象。

根据我的理解,在构建完成之前访问对象可能会导致崩溃,至少在某些语言中...如果它不会导致崩溃,那么我们只关心注册发生在最后,所以我们对象已准备好在我们注册其侦听器时接收事件。

我现在开始使用新的Swing GUI,并注意到构建Swing GUI时我的标准做法是在构造函数中连接事件监听器。

在构造函数完成之前,似乎不太可能调用Swing组件的事件侦听器,因为它们可能在组件被添加到可见的Swing容器之前没有连线,这只能在构造之后发生。

那么,在Swing中工作时,有没有真正的理由避免这种反模式?如果是这样,最简单的方法是什么?

2 个答案:

答案 0 :(得分:2)

只要你在UI线程中分配你的事件监听器,你就可以了。

答案 1 :(得分:0)

当然,行业标准Swing编程中的构造函数通常太大而且继承不必要。只要你是明智的并且在施工完成之前不要踢任何东西(导致事件被解雇),你应该没事。 (显然,请继续参加AWT EDT。)