[Resolvido] Quebrar while com um enter

Gente,

Queria fazer uma pergunta que deve ser facil, mas num estou conseguindo fazer:

Tenho um laço while, e quero que ele fique executando infinitamente até que alguem aperte ENTER

Alguem pode me dizer como faz?

[]s
Gui

EDIT: Resolvido com Multi Threads

ta usando swing?

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.

Hail

Man basta vc verificar com um KeyListener, ver se getKeyCode() == 13
que é o valor da tecla enter

abraço

[quote=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.[/quote]
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 }

ops duplo post =x

Para sair de um estrutura de repetição, o comando é break;

então

[code]while (condição) {

faz alguma coisa;

if (tecla é ENTER)
break;

}[/code]

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…

[quote=Bruno Laturner]Para sair de um estrutura de repetição, o comando é break;

então

[code]while (condição) {

faz alguma coisa;

if (tecla é ENTER)
break;

}[/code][/quote]

Mas Bruno como eu faria para pegar quando o cara teclou enter?
com keyEvent nao vai acabar fazendo o código no if nao servir de nada?
tipo:while(condiçao){ //Codigos if(KeyEvent.KEY_PRESSED==13) break; }
E com um Scanner por exemplo iria parar o while esperando o usuário digitar algo, assim tendo que obrigatoriamente pressionar enter.
Vlw

[quote]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…[/quote]
Eu bem que achei que iria acontecer isso =\

Pessoal só uma duvida como seria CTRL+S ?

O ctrl-s nao sei, mas o alt-s se lembro é 83… Ou a constante VK_S.

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.

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

[quote=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.... }[/quote]

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…

Puxa… como assim?

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:

Scanner scanner = new Scanner(System.in);  
     while(true){

            if(scanner.hasNext())
                if(scanner.next().equals("a"))
                    break;

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.

[quote=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.[/quote]

É, 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…

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::

[code]public class Interrupcao {
static class LoopPrincipal implements Runnable {
private boolean finalizar = false;
void notificarFinalizacao() {
finalizar = true;
}

	public void run() {			
		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");
	}
}

public static void main(String[] args) {		
	// Bota a thread pra rodar
	LoopPrincipal task = new LoopPrincipal();
	new Thread(task).start();

	new Scanner(System.in).hasNextLine(); // Espera o enter		
	task.notificarFinalizacao(); // Interrompe a tarefa.
}

}[/code]