[英]Java input without pausing
我如何在不暫停代碼的情況下為程序制作一個控制台? 例如,我有一個循環需要保持運行,但是當我在控制台中輸入命令時,我希望游戲檢查該命令是什么並在循環中對其進行處理。 循環不應該等待命令,而應該使用if語句檢查隊列中是否有命令。
順便說一句,如果有幫助,我正在制造一台專用服務器。
有一個非常明顯的方法:使用專用線程等待InputStream,從中讀取事件/命令,然后將它們傳遞到隊列中。
您的主線程將定期檢查此隊列。 每次檢查后,它都將處理隊列中的命令,或者如果它為空,則繼續執行該操作。
您想要的是一個線程,您可以在其中保持命令的運行狀態。 它可能看起來像這樣:
class ReadCommand implements Runnable
{
public void run()
{
// Command reading logic goes here
}
}
在運行其余代碼的“主”線程中,您必須像這樣啟動它:
new Thread(new ReadCommand())).start()
另外,您需要在某處放置一個命令隊列,該隊列由ReadCommand填充並從其他代碼讀取。 我建議您閱讀有關並發Java編程的手冊。
讓它們在兩個單獨的線程中運行。
class Server {
public static void main(String[] args) {
InputThread background = new InputThread(this).start();
// Run your server here
}
}
class InputThread {
private final Server server;
public InputThread(Server server) {
this.server = server;
}
public void run() {
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()) {
// blocks for input, but won't block the server's thread
}
}
}
服務器應在其自己的線程中運行。 這將允許循環運行而不會暫停。 您可以使用隊列將命令傳遞到服務器。 每次通過循環,服務器都可以檢查隊列並處理一個或多個命令。 然后,命令行可以根據自己的時間表將命令提交到隊列中。
您可以在控制台中的單獨線程中進行讀取。 這意味着您的主線程不必等待控制台。
甚至服務器應用程序也可以具有Swing GUI。 ;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.