java.util.NoSuchElementException: No line found ... после запуска программы с помощью Docker'a
Когда я искал информацию об ошибке:
java.util.NoSuchElementException: No line found ...
я нашел такой же вопрос здесь https://stackoverflow.com/questions/7209110/java-util-nosuchelementexception-no-line-found и узнал что при работе со Scanner нужно проверить, есть ли следующая строка с помощью метода hasNextLine().
В моем коде, в строке где я хочу записать пользовательский ввод в переменную line:
line = sc.nextLine();
я пробовал написать так:
if (sc.hasNextLine()){
line = sc.nextLine();
}
и это не помогло.
Но что еще интереснее, что когда я запускаю свой код в NetBeans или просто с помощью cmd окна, то все работает без каких либо ошибок. Данная ошибка появилась когда я точно такой же код запускаю через Docker. Может ли это быть как то с докером связанно - не знаю, имеет ли отношение здесь вообще Docker - тоже не знаю. Во всяком случае интересно почему программа не на докере работает, а с ним нет.
Вот файл который выдает ошибку:
import java.io.*;
import java.net.*;
import java.util.*;
public class CLI {
public static void main(String[] args) {
// establish a connection by providing host and port number
try (Socket socket = new Socket("localhost", 1234)) {
// writing to server
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
// reading from server
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
// object of scanner class
Scanner sc = new Scanner(System.in);
String line = null;
while (!"exit".equalsIgnoreCase(line)) {
// reading from user
System.out.print("Enter command: ");
line = sc.nextLine();
// sending the user input to server
out.println(line);
out.flush();
// displaying server reply
System.out.println("Server replied: " + in.readLine().replaceAll("~", "\n "));
}
// closing the scanner object
sc.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Ответы (1 шт):
Чтобы иметь возможность взаимодействовать с контейнером через консоль, контейнер должен быть запущен в интерактивном режиме docker run -i ....
https://docs.docker.com/engine/reference/run/#foreground
-i : Keep STDIN open even if not attached