2011-09-21 75 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编程手册。