Java输入没有暂停

时间:2011-09-21 18:17:11

标签: java concurrency

如何在不暂停代码的情况下为我的程序制作一种控制台?我有一个循环,例如,需要保持运行,但是当我在控制台中输入命令时,我希望游戏检查该命令是什么并在循环中处理它。循环不应该等待命令,而只是有一个if语句来检查队列中是否有命令。

顺便说一下,如果有帮助,我正在制作专用服务器。

5 个答案:

答案 0 :(得分:2)

有一个非常明显的方法:使用专用线程在InputStream上等待,从中读取事件/命令并将它们传递到队列中。

您的主线程将定期检查此队列。在每次检查之后,它将处理来自队列的命令,或者如果它是空的则继续它正在做的事情。

答案 1 :(得分:2)

您希望拥有的是一个保持命令读取代码运行的线程。它可能看起来像这样:

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

在运行其余代码的“主”线程中,您必须像这样启动它:

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

此外,您需要一个命令队列,从ReadCommand填充并从其他代码读取。 我建议你阅读有关并发java编程的手册。

答案 2 :(得分: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
        }
    }
}

答案 3 :(得分:1)

服务器应该在自己的线程中运行。这将允许循环运行而不会暂停。您可以使用队列将命令传递到服务器。每次循环时,服务器都可以检查队列并处理一个或多个命令。然后,命令行可以根据自己的计划将命令提交到队列中。

答案 4 :(得分:0)

您可以在一个单独的线程中从控制台中读取。这意味着您的主线程不必等待控制台。

即使是服务器应用程序也可以使用Swing GUI。 ;)