2011-01-07 975 views
6

我寫了一個Java應用程序,它有一段時間(input.readLine()),它繼續讀取輸入,直到用戶鍵入一個退出命令。我有一個.bat腳本可以在Windows中啓動它,並使用.sh在Linux中啓動它。該應用程序在兩個工作正常。如何接受Linux shell中的左/右/上/下箭頭輸入?

在Windows中,如果您輸入類似「檢查電子郵件」的命令並回車,它將執行該命令。然後,在下次提示時(即:下一次Java應用程序讀取一行輸入時),您可以點擊向上箭頭並回想起您的「檢查電子郵件」命令。您可以按左箭頭鍵將光標向左移動,等等。這正是我想要的。

但是,在Linux上,按向上鍵會導致^ [[D出現。左右箭頭鍵產生相似的ASCII輸出,如^ [[C。

我聽說過stty並查看了手冊頁,但無法弄清楚在啓動我的Java應用程序時需要在.sh腳本中進行更改。誰能幫我?

回答

1

readline函數用於Unices上的這個東西,但它是一個C函數。

Here你可以找到它的Java包裝。 (我從來沒有使用它)

4

最簡單的解決方案是使用外部包裝,讀取具有版本功能的行,然後將其發送到您的程序。一個很好的包裝是rlwrap

使用單獨的工具符合unix使用獨立工具進行單獨目的(線條版和任何程序)的理念。這也很簡單:只要讓您的外殼包裝運行rlwrap myprogram而不是myprogram

底層readline library(沒有聯繫到Java中的任何readLine方法,你會希望有一個Java包裝如Java-Readline)是更多的工作進行整合,並限制你的程序是GPL。只有當你想要的不僅僅是一個包裝可以提供的東西時,纔去尋找 - 主要是特定於應用程序的完成。

相關問題