如何在不暫停我的代碼的情況下爲我的程序創建一種控制檯?例如,我有一個循環需要保持運行,但是當我在控制檯中輸入命令時,我希望遊戲檢查該命令是什麼,並在循環中處理它。循環不應該等待一個命令,而只需要一個if語句來檢查隊列中是否有命令。未暫停的Java輸入
順便說一下,我正在製作專用服務器,如果有幫助的話。
如何在不暫停我的代碼的情況下爲我的程序創建一種控制檯?例如,我有一個循環需要保持運行,但是當我在控制檯中輸入命令時,我希望遊戲檢查該命令是什麼,並在循環中處理它。循環不應該等待一個命令,而只需要一個if語句來檢查隊列中是否有命令。未暫停的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
}
}
}
服務器應該在其自己的線程中運行。這將允許循環運行而不會暫停。您可以使用隊列將命令傳遞到服務器。每次循環時,服務器都可以檢查隊列並處理一個或多個命令。然後命令行可以根據自己的時間表將命令提交到隊列中。
有很明顯的方法:使用專用線程等待的InputStream,從中讀取事件/命令,並將其傳遞到隊列中。
而你的主線程會定期檢查這個隊列。在每次檢查之後,它將處理來自隊列的命令,或者如果它是空的,則繼續它正在執行的操作。
您可以在單獨的線程中從控制檯讀取數據。這意味着您的主線程不必等待控制檯。
即使服務器應用程序也可以有一個Swing GUI。 ;)
我希望它從一個命令行工作,雖然。 –
你想要的是一個線程,讓你保持命令讀取代碼的運行。它可能會是這個樣子:
class ReadCommand implements Runnable
{
public void run()
{
// Command reading logic goes here
}
}
在代碼的其餘部分正在運行的「主」線程,你必須象這樣開始:
new Thread(new ReadCommand())).start()
此外,您需要一個由ReadCommand填充並從另一個代碼讀取的命令隊列。 我建議您閱讀併發Java編程手冊。
您使用的鞦韆?你可以附加一個事件偵聽器的命令輸入一個文本框。還是這個「遊戲」不使用Swing? (你說過「服務器」 ....) –