Я пишу программу, которая в основном выступает в качестве почтового клиента как часть домашнего задания для класса в java. Я обычно не прибегаю к Интернету, чтобы отвечать на мои вопросы, но это то, что выходит за рамки того, что профессор пытается заставить нас учиться/практиковать, и мне нужно найти способ исправить это.Почему сканер не находит строку после первой итерации?
Проблема: если я запустил программу и введите вторую команду (ri), она предложит мне номер, а затем закончить, показывая сообщение, но сразу же после того, как она вернется во вторую итерацию методы .run() консоль возвращается:
Exception in thread "main" java.util.NoSuchElementException: No Line Found
at java.util.scanner.nextLine(Unknown Source)
Вот код (я только в то число важных вещей ... или по крайней мере то, что я думаю, что это важно).
public class CmdLoop {
private MailClient _client;
Scanner kbd;
private Hashtable<String, ICommand> _commands = new Hashtable<String, ICommand>();
public CmdLoop(MailClient client) {
_client = client;
_commands.put("h", new client.cmd.Help());
_commands.put("ri", new client.cmd.ReadInbox());
kbd = new Scanner(System.in);
}
public void run2() {
System.out.print("\nMail: ");
String command = kbd.nextLine();
ICommand call = _commands.get(command);
if (command.equals("q"))
return;
else if (call == null)
System.out.println(command + " not understood, type h for help");
else if (call.equals(""))
System.out.println(command + " not understood, type h for help");
else call.run(_client);
this.run2();
}
и п класс:
public class ReadInbox implements ICommand {
@Override
public void run(MailClient client) {
Scanner sc = new Scanner(System.in);
MailBox in = client.getInbox();
if(in.count() < 1)
System.out.println("Inbox empty");
else {
System.out.print("Enter the number of the message you would like to read: ");
int n = Integer.parseInt(sc.nextLine());
if(n > in.count())
System.out.println("Message number " + n + " can't be found");
else
in.getMessage(n - 1).show();
}
sc.close();
}
}
В основном это доходит до конца вызова ReadInbox.run(), то он вызывает this.run2(), возвращается к началу, выходы " Mail: ", а затем возвращает ошибку. Это то, что консоль выглядит в моем тесте:
Mail: ri
Enter the number of the message you would like to read: 1
Date: 2015/04/29 20:24:17
From: Charles Barkley (Charlie) <[email protected]>
Subj: testerino
this is another test
Mail: Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at client.CmdLoop.run2(CmdLoop.java:28)
at client.CmdLoop.run2(CmdLoop.java:37)
at Main.main(Main.java:29)
Если я правильно, получить его, чтобы они оба работают от того же сканера будет решить мою проблему, и я чувствую, что я должен знать, как это сделать , но я рисую пробел. Есть ли другой способ?
Покажите нам свой 'main()', а также покажите нам, какая строка вызывает исключение. – alfasin