如何在不暂停我的代码的情况下为我的程序创建一种控制台?例如,我有一个循环需要保持运行,但是当我在控制台中输入命令时,我希望游戏检查该命令是什么,并在循环中处理它。循环不应该等待一个命令,而只需要一个if语句来检查队列中是否有命令。未暂停的Java输入
顺便说一下,我正在制作专用服务器,如果有帮助的话。
如何在不暂停我的代码的情况下为我的程序创建一种控制台?例如,我有一个循环需要保持运行,但是当我在控制台中输入命令时,我希望游戏检查该命令是什么,并在循环中处理它。循环不应该等待一个命令,而只需要一个if语句来检查队列中是否有命令。未暂停的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
}
}
}
服务器应该在其自己的线程中运行。这将允许循环运行而不会暂停。您可以使用队列将命令传递到服务器。每次循环时,服务器都可以检查队列并处理一个或多个命令。然后命令行可以根据自己的时间表将命令提交到队列中。
有很明显的方法:使用专用线程等待的InputStream,从中读取事件/命令,并将其传递到队列中。
而你的主线程会定期检查这个队列。在每次检查之后,它将处理来自队列的命令,或者如果它是空的,则继续它正在执行的操作。
您可以在单独的线程中从控制台读取数据。这意味着您的主线程不必等待控制台。
即使服务器应用程序也可以有一个Swing GUI。 ;)
我希望它从一个命令行工作,虽然。 –
你想要的是一个线程,让你保持命令读取代码的运行。它可能会是这个样子:
class ReadCommand implements Runnable
{
public void run()
{
// Command reading logic goes here
}
}
在代码的其余部分正在运行的“主”线程,你必须象这样开始:
new Thread(new ReadCommand())).start()
此外,您需要一个由ReadCommand填充并从另一个代码读取的命令队列。 我建议您阅读并发Java编程手册。
您使用的秋千?你可以附加一个事件侦听器的命令输入一个文本框。还是这个“游戏”不使用Swing? (你说过“服务器” ....) –