Java 我是否应该担心“泄漏”的问题;这";指针在摆动?

Java 我是否应该担心“泄漏”的问题;这";指针在摆动?,java,swing,Java,Swing,我最近(在一个基于C#的类中)了解到,在对象的构造函数中注册事件侦听器有时被认为是危险的,因为这些事件侦听器在对象完全初始化之前就被赋予了对该对象的引用,并且可能(至少在理论上)在构造完成之前尝试访问该对象 据我所知,在构建完成之前访问对象可能会导致崩溃,至少在某些语言中是这样……如果它不会导致崩溃,那么我们只关心注册最后一次,这样我们的对象就可以在注册其侦听器时接收事件 我现在开始使用一个新的SwingGUI,并注意到我在构建SwingGUI时的标准实践是在构造函数中连接事件侦听器 似乎不太可

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

据我所知,在构建完成之前访问对象可能会导致崩溃,至少在某些语言中是这样……如果它不会导致崩溃,那么我们只关心注册最后一次,这样我们的对象就可以在注册其侦听器时接收事件

我现在开始使用一个新的SwingGUI,并注意到我在构建SwingGUI时的标准实践是在构造函数中连接事件侦听器

似乎不太可能在构造函数完成之前调用Swing组件的事件监听器,因为在将组件添加到可见的Swing容器之前,这些监听器可能没有连接,而只有在构造之后才会发生


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

只要在UI线程中分配事件侦听器,就可以了

当然,行业标准Swing编程中的构造函数通常太大,不需要继承。只要您是明智的,在构建完成之前不启动任何东西(导致事件被触发),您应该没事。(显然,要遵守AWT EDT。)

这不是假设事件将源自UI线程吗?通常会出现这种情况,但不能保证-可能会有来自计时器和外部数据源的事件。不会,但它确实假设分配事件侦听器的线程将位于UI线程上。