From 570b0e08adaebbbb488c142b8f813fe0477d08ff Mon Sep 17 00:00:00 2001 From: hstyi Date: Sat, 15 Mar 2025 15:11:28 +0800 Subject: [PATCH] fix: AWTEventListener memory leaks --- .../terminal/panel/vw/VisualWindowPanel.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/app/termora/terminal/panel/vw/VisualWindowPanel.kt b/src/main/kotlin/app/termora/terminal/panel/vw/VisualWindowPanel.kt index df4429c..90e4ad8 100644 --- a/src/main/kotlin/app/termora/terminal/panel/vw/VisualWindowPanel.kt +++ b/src/main/kotlin/app/termora/terminal/panel/vw/VisualWindowPanel.kt @@ -17,7 +17,7 @@ open class VisualWindowPanel(protected val id: String, protected val visualWindo protected val properties get() = Database.getDatabase().properties private val titleLabel = JLabel() private val toolbar = FlatToolBar() - private val visualWindow = this + private val visualWindow get() = this private val resizer = VisualWindowResizer(this) { !isWindow } private var isWindow = false set(value) { @@ -82,8 +82,7 @@ open class VisualWindowPanel(protected val id: String, protected val visualWindo toolbar.addMouseListener(dragListener) toolbar.addMouseMotionListener(dragListener) - // 监听全局事件 - Toolkit.getDefaultToolkit().addAWTEventListener(object : AWTEventListener { + val awtEventListener = object : AWTEventListener { override fun eventDispatched(event: AWTEvent) { if (event is MouseEvent) { if (event.id == MouseEvent.MOUSE_PRESSED) { @@ -95,7 +94,16 @@ open class VisualWindowPanel(protected val id: String, protected val visualWindo } } - }, MouseEvent.MOUSE_EVENT_MASK) + } + + // 监听全局事件 + toolkit.addAWTEventListener(awtEventListener, MouseEvent.MOUSE_EVENT_MASK) + + Disposer.register(this, object : Disposable { + override fun dispose() { + toolkit.removeAWTEventListener(awtEventListener) + } + }) // 阻止事件穿透 addMouseListener(object : MouseAdapter() {})