gpt4 book ai didi

java - 如何在不阻塞的情况下接收来自控制台的输入?

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:31 25 4
gpt4 key购买 nike

注意:我知道控制台是用于调试的,游戏应该使用 GUI。这是为了测试/体验

我正在编写一款以 60fps 运行的游戏。每次更新时,我都会检查用户是否输入了 String命令。如果是这样,它就会通过,但如果不是,null是 paas 通过的,并且 null被忽略。

扫描仪是不可能的,因为 hasNext() ,用于查看是否有数据要读取的方法可能会阻塞并导致问题。

我尝试过使用BufferedReader.ready() 。我不仅遇到了问题(从未返回 true ),而且我读到由于某些原因不建议这样做。

BufferedReader.available()总是返回 0,在文档中,它指出 InputStream.available()除非被覆盖,否则将始终返回 0。这是我的尝试:

class Game {

public static void main(String[] args) {
InputReader reader = new InputReader(System.in);
int timePerLoop = 1000/30;

Game game = new Game();
while(true) {
long start = System.nanoTime();
game.update(reader.next());
long end = System.nanoTime();

long sleepTime = timePerLoop + ((start - end) / 10000000);
if(sleepTime > 0)
try {
Thread.sleep(sleepTime);
}catch(InterruptedException e) {
e.printStackTrace();
}
else
Thread.yield();
}
}

public void update(String command) {
if(commands != null) {
//handle command
}

//update game
}
}

InputReader.java

public class InputReader {
private InputStream in;

public InputReader(InputStream stream) {
in = stream;
}

public String next() {
String input = null;
try {
while(in.available > 0) {
if(input == null)
input = "";

input += (char) in.read();
}
}catch(IOException e) {
e.printStackTrace();
}
return input;
}
}

InputStream其本身也存在与上述相同的问题。我不完全确定 System.in 中存储的对象是什么类型,但使用available()产生相同的结果。

我尝试过使用 reader()来自System.console() ,但是console()返回空值。我已经阅读了这个主题,并且我不明白为什么。这不是这样做的方法。

目标是检查流以查看它是否包含要读取的数据,这样我就可以在知道数据不会阻塞的情况下读取数据。

我不想使用单独的Thread处理用户输入,所以请不要推荐或询问原因。

输入必须来自控制台。在此过程中不会创建新的套接字。我读过一些有关它的主题,但没有一个明确说明解决方案。 这可能吗?

最佳答案

正如您自己所说,自定义 GUI 或附加线程是执行此操作的正确方法。但是,如果没有的话,您是否尝试过使用 readLine()例如:String inputR = System.console().readLine();

对 main() 的一些修改:

替换:InputReader reader = new InputReader(System.in);和: Console c = System.console();

替换:game.update(reader.next());与:game.update(c.readLine());

编辑:此线程也可能有帮助:Java: How to get input from System.console()

关于java - 如何在不阻塞的情况下接收来自控制台的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25172068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com