繁体   English   中英

Java输入无需暂停

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM