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()