Bom dia!
Estou fazendo um programa e quero que um loop seja interrompido somente quando for pressionada uma determinada tecla( 0, por exemplo). Pesquisei na net, mas nao achei como fazer isto.
Obrigada
Bom dia!
Estou fazendo um programa e quero que um loop seja interrompido somente quando for pressionada uma determinada tecla( 0, por exemplo). Pesquisei na net, mas nao achei como fazer isto.
Obrigada
Você está usando interface gráfica?
Esse loop roda numa thread separada?
Você está usando interface gráfica?
Esse loop roda numa thread separada?
A entrada de dados eh pelo console.
Inicialmente pensei em rodar este loop no main.
String letra = "";
//Usamos um scanner para ler do teclado.
Scanner input = new Scanner(System.in);
//Enquanto a letra digitada não for s
while (!letra.equals("s") {
System.out.println(letra);
System.out.println("Alguma coisa, ou 's' para sair: ");
letra = input.readln(); //Lemos do teclado aqui.
}
System.out.println("Fim do programa");
Oi
Na verdade eu quero que o loop seja quase infinito. Isto eh, ele so interrompe se for teclado S, senao ele roda o tempo todo. Seria como se o teclado gerasse uma interrupçao que interrompesse o loop.
Nesse caso, você deve usar uma outra thread:
import java.util.Scanner;
public class ExemploTecla {
public static void main(String[] args) {
// Disparamos o loop em outra thread
LoopRunnable loopRunnable = null;
String letra = "";
// Enquanto a letra digitada não for q
while (!letra.equals("q")) {
System.out.println("Pressione q para sair do programa, i para iniciar o loop, p para parar o loop");
Scanner input = new Scanner(System.in);
letra = input.nextLine();
// Se digitou i e não temos um loop em execução
if (letra.equalsIgnoreCase("i") && loopRunnable == null) {
// Iniciamos o loop
loopRunnable = new LoopRunnable();
Thread loopThread = new Thread(loopRunnable, "Looping thread");
loopThread.setDaemon(true);
loopThread.start();
}
// Se digitou p, e o loop está rodando.
if (letra.equalsIgnoreCase("p") && loopRunnable != null) {
// Usamos o método stop para avisar o runnable controlador
// do loop que desejamos para-lo.
loopRunnable.stop();
loopRunnable = null;
}
}
System.out.println("Fim do programa");
}
//Essa outra classe é o Runnable que controla a thread do loop.
private static class LoopRunnable implements Runnable {
private volatile boolean isStopped = false;
//Usado para que outra thread sinalize que queremos parar o loop.
public void stop() {
isStopped = true;
System.out.println("Parando o loop...");
}
public void run() {
try {
//A thread do loop roda até que seja sinalizado para parar
while (!isStopped) {
System.out.println("Looping rodando..." + isStopped);
Thread.sleep(500);
}
} catch (InterruptedException e) {
System.out.println("Thread do loop interrompida.");
}
System.out.println("Fim do loop");
}
}
}