System.in
ist der "Standard" -Eingabestrom, der Benutzereingabedaten liefert. Nach dem Schließen kann dieser Stream nicht mehr geöffnet werden. Ein solches Beispiel ist in dem Fall der Verwendung eines Scanners die Benutzereingabe zu lesen wie folgt:Warum ist es nicht möglich, einen geschlossenen (Standard) Stream wieder zu öffnen?
public class Test {
public static void main(String[] args) {
boolean finished;
do {
Scanner inputScanner = new Scanner(System.in);
finished = inputScanner.hasNext("exit");
boolean validNumber = inputScanner.hasNextDouble();
if (validNumber) {
double number = inputScanner.nextDouble();
System.out.print(number);
} else if (!finished) {
System.out.println("Please try again.");
}
inputScanner.close();
} while (!finished);
}
}
In diesem Beispiel wird eine Instanz vom Typ Scanner
erstellt und verwendet, um eine Reihe von Zahlen vom Benutzer zu lesen (bitte ignoriere andere Details mit diesem Code, die über den Rahmen dieses Beispiels hinausgehen. Ich weiß, dass der Scanner außerhalb der Schleife erstellt und geschlossen werden sollte. Nachdem eine Nummer von der Benutzereingabe abgerufen wurde, wird die Instanz dieses Scanner
(d. H. Der Eingabestrom) geschlossen. Wenn jedoch eine andere Nummer vom Benutzer angefordert wird und eine neue Instanz erstellt wird, kann der Eingabestream nicht erneut geöffnet werden. Im Fall dieses Beispiels wird eine Endlosschleife erstellt.
Die Frage ist: Warum ist es nicht möglich, einen geschlossenen Strom zu öffnen?
Da seine Ressourcen bereits wieder auf das Betriebssystem freigegeben wurden. Warum öffnen Sie den Scanner nicht und schließen ihn außerhalb der Schleife? – RealSkeptic
Ich werde nur Ihre [vorherige Frage] (http://stackoverflow.com/questions/33552505/scanner-continuous-loop) verknüpfen. Beide Fragen sind keine Duplikate, denn auf der ersten Frage stand "Warum wird mein Scanner nicht nach jeder Iteration blockiert". Aber es gibt einige nützliche Tipps und Erklärungen, die für zukünftige Leser nützlich sein könnten, wenn es um die Frage geht, "warum Sie einen geschlossenen Stream nicht wieder öffnen können". – Frakcool