From 6071b251a4b5826577b32652db59c3ad979f374a Mon Sep 17 00:00:00 2001 From: hstyi Date: Thu, 9 Jan 2025 14:58:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=BB=88=E7=AB=AF?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E9=87=8D=E5=A4=8D=E8=AE=B0=E5=BD=95=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../termora/tlog/TerminalLoggerDataListener.kt | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/app/termora/tlog/TerminalLoggerDataListener.kt b/src/main/kotlin/app/termora/tlog/TerminalLoggerDataListener.kt index f3f53d3..85f8f8d 100644 --- a/src/main/kotlin/app/termora/tlog/TerminalLoggerDataListener.kt +++ b/src/main/kotlin/app/termora/tlog/TerminalLoggerDataListener.kt @@ -34,6 +34,7 @@ class TerminalLoggerDataListener(private val terminal: Terminal) : DataListener private var writer: BufferedWriter? = null private val isRecording = AtomicBoolean(false) + private val isClosed = AtomicBoolean(false) // 监听 Recording 变化,如果已经停止录制,那么立即关闭文件 private val terminalLoggerActionPropertyChangeListener = PropertyChangeListener { evt -> @@ -56,13 +57,22 @@ class TerminalLoggerDataListener(private val terminal: Terminal) : DataListener init { terminal.addTerminalListener(object : TerminalListener { override fun onClose(terminal: Terminal) { - close() + if (isClosed.compareAndSet(false, true)) { + // 设置为已经关闭 + isClosed.set(true) + + // 移除变动监听 + terminal.getTerminalModel().removeDataListener(this@TerminalLoggerDataListener) + + // 关闭流 + close() + } } }) } override fun onChanged(key: DataKey<*>, data: Any) { - if (key != VisualTerminal.Written) { + if (key != VisualTerminal.Written || isClosed.get()) { return } @@ -151,6 +161,7 @@ class TerminalLoggerDataListener(private val terminal: Terminal) : DataListener ActionManager.getInstance().getAction(Actions.TERMINAL_LOGGER) ?.removePropertyChangeListener(terminalLoggerActionPropertyChangeListener) + this.channel?.close() this.coroutineScope?.cancel()