Olá, tentei procurar aqui no forum algum topico relacionado mas nao achei,
quero interromper um while() quando eu pressionar qualquer tecla do meu teclado
e logo ele sai do laço, sei que tem a função kbhit() em C
e em java?
obrigado!
Olá, tentei procurar aqui no forum algum topico relacionado mas nao achei,
quero interromper um while() quando eu pressionar qualquer tecla do meu teclado
e logo ele sai do laço, sei que tem a função kbhit() em C
e em java?
obrigado!
Não tenho um exemplo agora, mas acho que isso pode ser feito com Thread.
Ou talvez um listener com uma flag dentro do while.
Boa sorte!
Fiz recentemente um programa que utiliza exatamente oque você quer, e tive que usar Thread.
Você basicamente vai precisar fazer um código neste estilo onde o abortado é uma variável boolean inicialmente setada como false e, uma vez pressionado o botão cancelar, o atributo tornar-se-á true cancelando instantaneamente o while.
new Thread ( new Runnable() {
public void run() {
while(!abortado){
comandos...
}
}
} ).start();
hmm acho que deu pra ter uma ideia mas achei complicado
não teria uma maneira mais simples? tipo uma função pronta?
[quote=SergioFilho]Fiz recentemente um programa que utiliza exatamente oque você quer, e tive que usar Thread.
Você basicamente vai precisar fazer um código neste estilo onde o abortado é uma variável boolean inicialmente setada como false e, uma vez pressionado o botão cancelar, o atributo tornar-se-á true cancelando instantaneamente o while.
new Thread ( new Runnable() {
public void run() {
while(!abortado){
comandos...
}
}
} ).start();
[/quote]
Oi,
Se utilizar Thread, o correto do looping seria.:
new Thread ( new Runnable() {
public void run() {
while(!thread.isInterrupted()){
comandos...
}
}
} ).start();
Agora, se você quiser fazer um looping e interrompe-lo ao clicar uma tecla (sem utilizar Thread), basta usar uma flag.:
[code]
boolean
flag = true;
while (flag) {
// Executa a codificação até a flag virar false;
}[/code]
Na ação de sua tecla, faça a flag alterar seu valor.
Obs.: Não sei se isso em tempo de execução vai funcionar no instante exato em que clicar na tecla.
Tchauzin!
oi lina, vlw pela ideia do thread!
em questão da variavel boolean virar false dentro do loop só funciona em tempo de compilação
em execução já não da.
obrigado!
Olá, pra funcionar em execução…
Não sei se é bem isso que vc quer, qualquer coisa rode em modo debug e veja o que serve pra vc…
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
public class testeTeclado {
static boolean flag = true;
JFrame janela = new JFrame();
public static void main(String[] args) {
new testeTeclado();
int i = 0;
while (isFlag()) {
System.out.println("contando: " + i++);
}
}
public static boolean isFlag() {
return flag;
}
public static void setFlag(boolean flag) {
testeTeclado.flag = flag;
}
private testeTeclado() {
//definimos o título da janela
janela.setTitle("Primeira Aplicação Gráfica");
//definimos a largura e a altura da janela
janela.setSize(350, 150);
//define que ao fechar a janela, encerre a aplicação
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
janela.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent arg0) {
setFlag(false);
}
@Override
public void keyReleased(KeyEvent arg0) {
}
@Override
public void keyPressed(KeyEvent arg0) {
setFlag(false);
}
});
//mostramos a janela
janela.setVisible(true);
}
}
Espero ter ajudado…
é isso mesmo!! vlw!