2
我使用jline
,我有一個整潔的ConsoleReader
,一切都很好。但是,如果您在提示中輸入了某些內容並在stdout上輸出(來自另一個線程),則輸出會拆分您輸入的單詞/命令。jline保持提示在底部
如何在終端底部保持jline
提示?
我正在使用jline
1,但如果足夠穩定,我願意使用jline
2。
我使用jline
,我有一個整潔的ConsoleReader
,一切都很好。但是,如果您在提示中輸入了某些內容並在stdout上輸出(來自另一個線程),則輸出會拆分您輸入的單詞/命令。jline保持提示在底部
如何在終端底部保持jline
提示?
我正在使用jline
1,但如果足夠穩定,我願意使用jline
2。
終於明白了這一點...這就是你所做的。當你想輸出新的數據然後
private ConsoleReader console = ...;
private CursorBuffer stashed;
private void stashLine() {
this.stashed = this.console.getCursorBuffer().copy();
try {
this.console.getOutput().write("\u001b[1G\u001b[K");
this.console.flush();
} catch (IOException e) {
// ignore
}
}
private void unstashLine() {
try {
this.console.resetPromptLine(this.console.getPrompt(),
this.stashed.toString(), this.stashed.cursor);
} catch (IOException e) {
// ignore
}
}
,首先調用stashLine()
保存當前控制檯輸入,然後再輸出的輸出任何新的線路,然後調用unstashLine()
恢復它:首先,定義這些功能。
您的主席,值得一枚獎章。 –
該庫據稱設計用於處理控制檯輸入;我看不出它是如何處理控制檯輸出的。問題是控制檯I/O事件是異步的(在你的情況下)。也許,您需要在執行輸入時將控制檯輸出存儲在臨時緩衝區中,並在輸入完成後顯示來自緩衝區的輸出。 –
也許您需要查找Java的Curses庫http://sourceforge.net/projects/javacurses/,http://sourceforge.net/projects/enigma-shell/或http://www.javaworld.com/ javaworld/javaqa/2002-12/02-qa-1220-console.html它允許您重新定位您的控制檯輸入/輸出光標 –