So unterbrechen Sie einen Aufruf von scanner.nextline ()
Es gibt viele Diskussionen über das Unterbrechen des Lesens des Systems.in, aber ich suche hier eine Art Rat, wie ich das, was ich erreichen möchte, am besten codieren kann.
Ich habe eingetlogin()
Methode, die Folgendes tun muss: Bitten Sie einen Benutzer, die gewünschten Anmeldeumgebungsdetails einzugeben. Wenn der Benutzer nach 6 Sekunden keinen gültigen Wert ("live" oder "test") eingegeben hat, setzen Sie die Benutzeranmeldungsvariable auf "test" und geben Sie ihn zurück an den Anrufer.
Ich habe den folgenden Ansatz für diegetlogin()
Implementierung:
Starten Sie zwei Threads, die Folgendes tun:
thread1
Erstellt ein Scannerobjekt und ruft dann aufscanner.nextline()
und je nach Benutzereingabe eine Variable setzenuserlogin
. Unterbricht Thread2 vor dem Beendenthread1
.thread2
wartet 6 Sekunden und wenn danachuserlogin
ist immer noch nicht festgelegt, dann legen Sie einen Standardwert für festuserlogin
. Interruptsthread1
vor dem Verlassenthread2
.Beitretenthread2
Haupt zu stoppenThread
von der Rückkehruserlogin
als null
Benutzeranmeldung zurückgeben
Das Problem, das ich mit dem Ansatz habe, ist dasscanner.nextline()
unterbricht nicht wennthread2
Anrufethread1.interrupt
, weshalb ich mich nicht anschließethread1
in Schritt 2 als HauptThread
würde hängen. Gibt es einen Weg zu bekommenthread1
zu vervollständigen nachthread2
unterbricht es? Oder ist dieser Ansatz völlig übertrieben und es gibt einen viel einfacheren Weg, um den Vertrag zu erreichen?