![](/img/trans.png)
[英]How would I receive and send information to console in a different program in Java?
[英]How would I receive input from console without blocking?
注意:我了解控制台是用於調試的,游戲應使用GUI。 這是為了測試/體驗
我正在寫一個以60fps運行的游戲。 每次更新時,我都會檢查用戶是否輸入了String
命令。 如果是這樣,它將通過,但如果不是,則通過paas傳遞null
,並將忽略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()
產生相同的結果。
我試過使用System.console()
的reader()
System.console()
,但console()
返回null。 我已經讀過這個主題,所以我不感到困惑。 這不是這樣做的方法。
目的是檢查流以查看其是否包含要讀取的數據,因此我可以在不阻塞的情況下讀取數據。
我不想使用單獨的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:如何從System.console()獲取輸入
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.