System.out.println(“Pressione enter para sair”); while(true){
//executa alguns códigos
}
Eu quero dar um enter no console pra parar.
D
Dantalian
Hail
Man basta vc verificar com um KeyListener, ver se getKeyCode() == 13
que é o valor da tecla enter
abraço
D
Dantalian
gui.orioli:
não… é assim:
System.out.println(“Pressione enter para sair”); while(true){
//executa alguns códigos
}
Eu quero dar um enter no console pra parar.
O que exatamente vc irá executar? Vai ter leitura de dados com o Scanner? Caso tenha ficará dificil a logica que vc quer.
Se nao tente algo como: while(KeyEvent.KEY_PRESSED!=13){ //mas acho que assim ele só deixa de executar o while... deve entrar num loop infinito. =\ Tô sem java aqui senão testava
}
D
Dantalian
ops duplo post =x
B
Bruno_Laturner
Para sair de um estrutura de repetição, o comando é break;
E com um Scanner por exemplo iria parar o while esperando o usuário digitar algo, assim tendo que obrigatoriamente pressionar enter.
Vlw
D
Dantalian
Não, a alguma coisa que eu vou executar é totalmente diferente de qualquer coisa que use o console… vai ficar copiando arquivos e coisas assim…
O que eu quero é que essa rotina seja executada indefinidamente até que seja dado um enter no console. Será que tem como?
o
While(KeyEvent.KEY_PRESSED != 13)
não saiu do while…
Eu bem que achei que iria acontecer isso =\
Alchemist
Pessoal só uma duvida como seria CTRL+S ?
D
Dantalian
O ctrl-s nao sei, mas o alt-s se lembro é 83… Ou a constante VK_S.
G
gui.orioli
Isso, com o Scanner, ele vai parar e ficar esperando o cara digitar algo, e pra continuar ele vai ter que digitar algo que não Enter. Eu quero algo que leia o que ele digitar caso ele digite, e se for enter, ele pare.
gomesrod
Uma sugestão:
Criar uma thread que fica esperando o teclado enquanto o código principal executa normalmente.
Quando o usuário pressionar Enter, uma flag é modificada e você pode usar essa condição para sair do loop principal.
new Thread(objetoControleTeclado).start();
while(!objetoControleTeclado.isEnterPressed()) {
// código....
}
EDIT: Acabei respondendo sem pensar direito… na verdade ficaria mais simples se o loop principal fosse para a segunda thread, e a thread Main ficasse esperando o teclado
G
gui.orioli
gomesrod:
Uma sugestão:
Criar uma thread que fica esperando o teclado enquanto o código principal executa normalmente.
Quando o usuário pressionar Enter, uma flag é modificada e você pode usar essa condição para sair do loop principal.
new Thread(objetoControleTeclado).start();
while(!objetoControleTeclado.isEnterPressed()) {
// código....
}
Hmmm… tá, provavelmente funcione… mas, pelo menos eu acho, parece um jeito complicado pra resolver um problema simples, né?
Outro porem que tem que ver é se o enter vai ser nesse mesmo console…
Eu tava pensando se não tinha algo usavel no System.in ou algo assim…
gomesrod
Puxa… como assim?
G
gui.orioli
Consegui fazer algo parecido com o que eu queria, com a unica diferença de que eu não sei como ler o Enter, então estou lendo um Caracter… só preciso de ajuda pra ler o enter ao invés:
Para ver se foi pressionado enter você pode usar scanner.hasNextLine().
Agora esse código a meu ver tem um problema… ele vai ficar esperando você digitar alguma coisa e não vai realmente executar o loop enquanto não digitar.
G
gui.orioli
gomesrod:
Para ver se foi pressionado enter você pode usar scanner.hasNextLine().
Agora esse código a meu ver tem um problema… ele vai ficar esperando você digitar alguma coisa e não vai realmente executar o loop enquanto não digitar.
É, notei… =/
Talvez só com threads então =/
Acho que então sua idéia de deixar a Thread que verifica o teclado na classe principal seja melhor mesmo…
gomesrod
Depois que vi o tópico fiquei curioso e implementei pra testar. Aqui vai, você vai ver que é bem mais simples do que parece :wink::
publicclassInterrupcao{staticclassLoopPrincipalimplementsRunnable{privatebooleanfinalizar=false;voidnotificarFinalizacao(){finalizar=true;}publicvoidrun(){while(!finalizar){// Este é o loop com o código principal// Faça tudo que quiser aqui.System.out.println(System.nanoTime());}System.out.println("Hora de parar");}}publicstaticvoidmain(String[]args){// Bota a thread pra rodarLoopPrincipaltask=newLoopPrincipal();newThread(task).start();newScanner(System.in).hasNextLine();// Espera o enter task.notificarFinalizacao();// Interrompe a tarefa.}}
G
gui.orioli
Real, funcionou mesmo!
Então, quando você falou, estava tentando fazer isso (tinha pensado umas coisas de umas formas mais complicadas, mas blz!) Esse jeito realmente funciona…
Só fiquei curioso se realmente a InputStream e a Scanner não oferecem um jeito de fazer isso…