como interromper uma chamada de scanner.nextline ()
Há muitos tópicos sobre o SO sobre a interrupção da leitura do sistema, mas o que estou procurando aqui é algum tipo de conselho sobre a melhor forma de codificar o que estou tentando alcançar.
eu tenho umgetlogin()
método que precisa fazer o seguinte: pedir a um usuário que insira os detalhes do ambiente de login desejado, se após 6 segundos o usuário não inserir um valor válido ("live" ou "test") então defina userlogin como "test" e retorne para o chamador.
Eu tomei a seguinte abordagem para ogetlogin()
implementação:
Inicie dois encadeamentos que façam o seguinte:
thread1
cria um objeto de scanner e chamascanner.nextline()
e dependendo da entrada do usuário, defina uma variáveluserlogin
. Interrompe o thread2 antes de sairthread1
.thread2
espera 6 segundos e se depois dissouserlogin
ainda não está definido, defina um valor padrão parauserlogin
. Interrupçõesthread1
antes de sairthread2
.Junte-sethread2
para parar principalThread
de retornaruserlogin
como nulo
retornar userlogin
O problema que tenho com a abordagem é quescanner.nextline()
não interrompe quandothread2
chamadasthread1.interrupt
, e é por isso que eu não participothread1
no passo 2 como o principalThread
iria cair. Existe uma maneira de obterthread1
para completar depoisthread2
interrompe isso? Ou então essa abordagem é completamente exagerada e há uma maneira muito mais simples de alcançar o contrato?