Как закрыть сканер java
Я понял, что это как-то связано со строкой input_scanner.close(); , но когда я удаляю ее, я получаю предупреждение:
Утечка ресурсов: "input_scanner" никогда не закрывается "
Есть ли способ предотвратить появление ошибок и избавиться от предупреждений?
Вы должны проверить, есть ли у вас данные, которые нужно использовать для Scanner, используя hasNextLine api, что вы могли бы сделать так:
Операция сканирования может заблокировать ожидание ввода. Если никакие входные данные не получены, то объект сканера не должен читать, что приводит к возникновению исключения, поскольку он не находит элемент, который необходимо закрыть. Проверка того, состоит ли поток из чего-либо, что может быть прочитано путем сканирования объекта, поможет вам получить такого рода исключение.
Что ж, сначала я рекомендую вам использовать API, чтобы понять исключения, которые показывает вам Java.
Когда вы используете сканер, stringTokenizer, итераторы . вы должны убедиться, что у вас есть больше элементов для чтения, прежде чем пытаться их прочитать. Если вы этого не сделаете, вы можете получить исключения такого типа.
Если вы хотите прочитать более одной строки, используйте while (input_scanner.hasNextLine())
PS: рекомендуется закрыть сканер с помощью input_scanner.close() , когда вы закончите с ним.
Фактически, поскольку вы используете Scanner for System.in, это означает, что это блокирующий вызов, который будет удерживаться до тех пор, пока не получит первый ввод от пользователя. Поскольку вы - локальная переменная, вам действительно не нужно закрывать сканер, и вам определенно не нужен цикл while для hasNextLine ();
Используйте try-with-resources, чтобы гарантировать, что ваш сканер закроется независимо от того, возникнут ли какие-либо исключения.
Вы можете использовать это со всем, что реализует AutoCloseable, и это намного лучше, чем требовать кучу try-catch для исключений, возникающих при закрытии.
Java Scanner Class
Учебник по Java: текстовый файл в виде таблицы базы данных | Эпизод 3 | Обновить данные из таблицы
Когда я запускаю следующий код,
Я получаю такую ошибку:
Я понял, что это как-то связано с линией input_scanner.close(); но когда я удаляю его, я получаю предупреждение:
Утечка ресурсов: "input_scanner" никогда не закрывается "
Есть ли способ предотвратить появление ошибок и избавиться от предупреждений?
- 2 Я не думаю, что вы можете использовать несколько сканеров с System.in надежно. Если закроешь, значит закроешь System.in . если вы этого не сделаете, то второй созданный вами сканер может не запуститься с того места, где остановился первый (потому что первый может буферизовать несколько строк)
Вы должны проверить, есть ли у вас данные для использования Scanner, используя hasNextLine api, который вам может понравиться:
- если вам действительно нужен ввод, вы должны использовать цикл while. Прямо сейчас он проверит, есть ли у вас какие-либо данные для использования, и если нет, он вернет пустую строку.
Что ж, сначала я рекомендую вам использовать API, чтобы понять исключения, которые показывает вам Java.
Когда вы используете сканер, stringTokenizer, итераторы . вы должны убедиться, что у вас есть больше элементов для чтения, прежде чем пытаться их прочитать. Если вы этого не сделаете, вы можете получить исключения такого типа.
Если вы хотите прочитать более одной строки, используйте while (input_scanner.hasNextLine())
PS: рекомендуется закрыть сканер с помощью input_scanner.close() когда вы закончите с этим.
используйте try-with-resources, чтобы гарантировать, что ваш сканер закроется независимо от того, возникнут ли какие-либо исключения.
Вы можете использовать это со всем, что реализует AutoCloseable, и это намного лучше, чем требовать кучу try-catch для исключений, возникающих при закрытии.
Фактически, поскольку вы используете Scanner for System.in, это означает, что это блокирующий вызов, который будет удерживаться до тех пор, пока не получит первый ввод от пользователя. Поскольку вы - локальная переменная, вам действительно не нужно закрывать сканер, и вам определенно не нужен цикл while для hasNextLine ();
Операция сканирования может заблокировать ожидание ввода. Если никакие входные данные не получены, то объект сканера не должен читать, что приводит к возникновению исключения, поскольку он не находит элемент, который необходимо закрыть. Проверка того, состоит ли поток из чего-либо, что может быть прочитано путем сканирования объекта, поможет вам получить такого рода исключение.
Программа на Java для проверки четности или нечетности числа - для начинающих
Когда я запускаю следующий код,
Я получаю такую ошибку:
Я понял, что это как-то связано с линией input_scanner.close(); но когда я удаляю его, я получаю предупреждение:
Утечка ресурсов: "input_scanner" никогда не закрывается "
Есть ли способ предотвратить появление ошибок и избавиться от предупреждений?
- 2 Я не думаю, что вы можете использовать несколько сканеров с System.in надежно. Если закроешь, значит закроешь System.in . если вы этого не сделаете, то второй созданный вами сканер может не запуститься с того места, где остановился первый (потому что первый может буферизовать несколько строк)
Вы должны проверить, есть ли у вас данные для использования Scanner, используя hasNextLine api, который вам может понравиться:
- если вам действительно нужен ввод, вы должны использовать цикл while. Прямо сейчас он проверит, есть ли у вас какие-либо данные для использования, и если нет, он вернет пустую строку.
Что ж, сначала я рекомендую вам использовать API, чтобы понять исключения, которые показывает вам Java.
Когда вы используете сканер, stringTokenizer, итераторы . вы должны убедиться, что у вас есть больше элементов для чтения, прежде чем пытаться их прочитать. Если вы этого не сделаете, вы можете получить исключения такого типа.
Если вы хотите прочитать более одной строки, используйте while (input_scanner.hasNextLine())
PS: рекомендуется закрыть сканер с помощью input_scanner.close() когда вы закончите с этим.
используйте try-with-resources, чтобы гарантировать, что ваш сканер закроется независимо от того, возникнут ли какие-либо исключения.
Вы можете использовать это со всем, что реализует AutoCloseable, и это намного лучше, чем требовать кучу try-catch для исключений, возникающих при закрытии.
Фактически, поскольку вы используете Scanner for System.in, это означает, что это блокирующий вызов, который будет удерживаться до тех пор, пока не получит первый ввод от пользователя. Поскольку вы - локальная переменная, вам действительно не нужно закрывать сканер, и вам определенно не нужен цикл while для hasNextLine ();
Операция сканирования может заблокировать ожидание ввода. Если никакие входные данные не получены, то объект сканера не должен читать, что приводит к возникновению исключения, поскольку он не находит элемент, который необходимо закрыть. Проверка того, состоит ли поток из чего-либо, что может быть прочитано путем сканирования объекта, поможет вам получить такого рода исключение.
Читайте также: