2011-09-21 81 views
0

如何在不暫停我的代碼的情況下爲我的程序創建一種控制檯?例如,我有一個循環需要保持運行,但是當我在控制檯中輸入命令時,我希望遊戲檢查該命令是什麼,並在循環中處理它。循環不應該等待一個命令,而只需要一個if語句來檢查隊列中是否有命令。未暫停的Java輸入

順便說一下,我正在製作專用服務器,如果有幫助的話。

+0

您使用的鞦韆?你可以附加一個事件偵聽器的命令輸入一個文本框。還是這個「遊戲」不使用Swing? (你說過「服務器」 ....) –

回答

2

讓他們兩個單獨的線程運行。

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 
     } 
    } 
} 
1

服務器應該在其自己的線程中運行。這將允許循環運行而不會暫停。您可以使用隊列將命令傳遞到服務器。每次循環時,服務器都可以檢查隊列並處理一個或多個命令。然後命令行可以根據自己的時間表將命令提交到隊列中。

2

有很明顯的方法:使用專用線程等待的InputStream,從中讀取事件/命令,並將其傳遞到隊列中。

而你的主線程會定期檢查這個隊列。在每次檢查之後,它將處理來自隊列的命令,或者如果它是空的,則繼續它正在執行的操作。

0

您可以在單獨的線程中從控制檯讀取數據。這意味着您的主線程不必等待控制檯。

即使服務器應用程序也可以有一個Swing GUI。 ;)

+0

我希望它從一個命令行工作,雖然。 –

2

你想要的是一個線程,讓你保持命令讀取代碼的運行。它可能會是這個樣子:

class ReadCommand implements Runnable 
{ 
    public void run() 
    { 
     // Command reading logic goes here 
    } 
} 

在代碼的其餘部分正在運行的「主」線程,你必須象這樣開始:

new Thread(new ReadCommand())).start() 

此外,您需要一個由ReadCommand填充並從另一個代碼讀取的命令隊列。 我建議您閱讀併發Java編程手冊。