我正在尝试为我的频道制作IRC机器人。我希望机器人能够从控制台接收命令。为了让主循环等待用户输入内容,我添加了循环:
while(!userInput.hasNext());
这似乎不起作用。我听说过BufferedReader,但我从未使用过,也不确定这是否能解决我的问题。
while(true) {
System.out.println("Ready for a new command sir.");
Scanner userInput = new Scanner(System.in);
while(!userInput.hasNext());
String input = "";
if (userInput.hasNext()) input = userInput.nextLine();
System.out.println("input is '" + input + "'");
if (!input.equals("")) {
//main code
}
userInput.close();
Thread.sleep(1000);
}
您无需检查是否有可用的输入等待和Hibernate,直到有自扫描程序为止。nextLine()将阻止,直到有一行可用。
看一看我写的这个例子来演示它:
public class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
while (true) {
System.out.println("Please input a line");
long then = System.currentTimeMillis();
String line = scanner.nextLine();
long now = System.currentTimeMillis();
System.out.printf("Waited %.3fs for user input%n", (now - then) / 1000d);
System.out.printf("User input was: %s%n", line);
}
} catch(IllegalStateException | NoSuchElementException e) {
// System.in has been closed
System.out.println("System.in was closed; exiting");
}
}
}
请输入一行,等待用户输入的时间为1.892s,用户输入为:hello,请输入一行,系统。in已关闭;正在退出
所以你所要做的就是使用扫描器。nextLine(),应用程序将等待用户输入换行符。您也不想在循环中定义扫描仪并将其关闭,因为您将在下一次迭代中再次使用它:
Scanner userInput = new Scanner(System.in);
while(true) {
System.out.println("Ready for a new command sir.");
String input = userInput.nextLine();
System.out.println("input is '" + input + "'");
if (!input.isEmpty()) {
// Handle input
}
}
}
null 所以我面临一个问题,如果打开,等待输入,如何停止它?我尝试过将它放在线程中并或使用作为标志,但它并没有停止
问题内容: 我有一个控制台应用程序,执行任务后,必须向用户提供反馈,例如“操作完成”或“操作失败”以及详细的错误。 关键是,如果我只是“让它运行”,将输出输出消息,但控制台不久后将关闭,从而没有时间阅读消息。 据我所记得,在C ++中,每个控制台应用程序都将以“按任意键退出”或类似的结尾。在C#中,我可以使用 但是如何用Java做到这一点呢?我正在使用Scanner类,但鉴于“输入”是我的Scan
这是一个提倡的范例,即 wait() 应该在同步块内的 while 循环中调用。 我的问题是,waiting()线程如何获得锁? 考虑线程1首先运行并开始等待条件。它释放锁,线程2获得锁设置条件并通知线程1。现在线程1获得锁,检查条件并开始执行“做某事”。 我的问题是当线程1被通知它从time条件开始执行时,已同步(mon)的代码行永远不会再次执行,那么线程1如何获得锁?将锁还给线程1的内部动态是
我正在编写一个棋盘游戏,我需要检查玩家正在移动的敌人并提示进行攻击。但是,由于游戏是如何制作的,移动方法是在JavaFX应用程序线程上调用的,我希望能够提示用户是否要与敌人战斗。 我的对话框工作正常,使用等待和通知,在主线程上不工作,会导致程序崩溃,有人知道如何暂停这个线程的执行,直到用户单击其中一个按钮。 我为描述道歉,太晚了。 检查敌人的方法该方法检查敌人,如果用户选择是,则返回敌人。它运行在
问题内容: 我正在使用Java的扫描仪读取用户输入。如果我仅使用nextLine一次,那就可以了。使用两个nextLine时,第一个不会等待用户输入字符串(第二个会输入)。 输出: X:Y :(等待输入) 我的密码 任何想法为什么会发生这种情况?谢谢 问题答案: 您可能像以前那样调用方法。这样的程序是这样的: 演示您所看到的行为。 问题是不消耗,因此下一个调用将消耗它,然后等待读取的输入。 您需要
问题内容: 我正在尝试制作一个暂停用户输入的简单命令。我认为在Bash脚本中它将很有用。 这是我的代码: 它甚至不会暂停供用户输入。 我之前尝试过使用getch()(ncurses)。发生的是,屏幕变黑了,当我按下一个键时,它又回到了原来的屏幕上,我看到了: 这是我想要的。但是我想要的只是DOS / Windows 中的命令(我使用Linux)。 问题答案: 从GNU C库手册: 函数:char