如何在不暂停代码的情况下为我的程序制作一种控制台?我有一个循环,例如,需要保持运行,但是当我在控制台中输入命令时,我希望游戏检查该命令是什么并在循环中处理它。循环不应该等待命令,而只是有一个if语句来检查队列中是否有命令。
顺便说一下,如果有帮助,我正在制作专用服务器。
答案 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。 ;)