Не удалось запустить тот же код Java в приложении Java Gradle

#java #gradle #netbeans #nosuchelementexception

#java #gradle #netbeans #исключение nosuchelementexception

Вопрос:

Я столкнулся с проблемой при запуске следующего кода в Java-приложении Netbeans Gradle.

 import java.util.Scanner;
import java.util.concurrent.TimeUnit;

public class Main {
    private static int imgBundle;
    private static int flacBundle;
    private static int vidBundle;
    public static void main(String[] args) {
        takeInput();
    }
    private static void takeInput() {
        Scanner input = new Scanner(System.in);
        System.out.print("Please enter the number of Image format for the order: ");
        imgBundle = input.nextInt();     // where the error occurred
        System.out.print("Please enter the number of Audio format for the order: ");
        flacBundle = input.nextInt();    // where the error occurred
        System.out.print("Please enter the number of Video format for the order: ");
        vidBundle = input.nextInt();     // where the error occurred
        System.out.println("Your Order Input:");
        System.out.println(imgBundle   " IMG");
        System.out.println(flacBundle   " FLAC");
        System.out.println(vidBundle   " VID");
        System.out.println("");
        System.out.println("Calculating...Please wait...");
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException ie) {
            Thread.currentThread().interrupt();
        }
    }
}
 

Произошла ошибка

 Exception in thread "main" java.util.NoSuchElementException
    at java.base/java.util.Scanner.throwFor(Scanner.java:937)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at BundlesCalculator.Main.takeInput(Main.java:65)
    at BundlesCalculator.Main.main(Main.java:43)
 

Однако я написал тот же код в простом Java-приложении без Gradle, никаких проблем не возникло.
Мне просто интересно, что я сделал неправильно?

Ответ №1:

Scanner вызовет это исключение, если больше нет ввода для чтения. Это может произойти, если ваш входной файл пуст, или он не содержит достаточно данных для всех nextInt() вызовов.

Если ввод осуществляется с терминала, вы указали end-of-file (Ctrl-Z в Windows, Ctrl-D в Linux) до того, как все входные данные были прочитаны.

Комментарии:

1. Как я могу это исправить? Я пытался использовать if (input.hasNextInt()) , но метод не принимает входные данные от терминала. Он просто напечатал сообщение об ошибке, которое я установил в операторе else