Я в основном пытаюсь вернуться из метода, который читает пользовательский ввод из стандартного потока ввода. Поскольку у пользователя есть возможность выйти из приложения, я пытаюсь найти лучший способ сделать это exit . В идеале я смогу вернуться с begin()
и позволить main()
закончить, тем самым выйдя из приложения.
public static void main(String[] args) {
begin();
}
private static void begin(){
Machine aMachine = new Machine();
String select=null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true){
try {
select = br.readLine();
} catch (IOException ioe) {
System.out.println("IO error trying to read your selection");
return;
}catch(Exception ex){
System.out.println("Error trying to evaluate your input");
return;
}
if (Pattern.matches("[RQrq1-6]", select)) {
aMachine.getCommand(select.toUpperCase()).execute(aMachine);
}
else {
System.out.println(aMachine.badCommand()+select);
aMachine.getStatus();
}
}
}
Основная логика имеет место, когда aMachine
выполняет заданную команду пользователем следующим способом:
aMachine.getCommand(select.toUpperCase()).execute(aMachine);
Опять-таки, проблема в том, как выйти из приложения, когда пользователь введет команду Q или q. Команда quit выглядит так:
public class CommandQuit implements Command {
public void execute(Machine aMachine) {
aMachine.getStatus();
return; //I would expect this to force begin() to exit and give control back to main()
}
}
Теперь, следуя совету из моего предыдущего вопроса , чтобы выйти из приложения, я пытаюсь вернуться к main () и в основном позволяю main () завершиться. Таким образом, я избегаю использования System.exit(0)
, хотя это тоже подойдет.
Итак, в этом примере у меня есть оператор return
в методе execute
класса CommandQuit
, который вызывается, когда мы получаем Q или q от пользователя. Однако, когда begin()
выполняет команду выхода, вместо возврата из цикла while(true)
, из begin()
и обратно в main()
, поток управления никогда не реагирует на return;
в execute
метод CommandQuit.
Есть ли что-то, чего мне не хватает в моем примере? Возможно, что-то настолько очевидно, что я не могу видеть это в данный момент. Спасибо за любую помощь.