Quero fazer um programa que faz um Loop e dentro dele, queria que tivesse uma verificação se o metodo ActionListener foi utilizado, se sim, cancele o Loop
Exemplo:
Quando clicar qualquer tecla ele muda a variável continuar para false e anule o while
Hm… Para tal você deve setar uma FLAG no método actionPerformed próprio não?
Faça o seguinte, no método que verifica se foi clicado, crie uma Thread que faça isso - verifique - e no método actionPerformed sete uma flag - boolean - que sirva como objeto de verificação.
A Thread vai ficar checando - com while e, opcionalmente, Thread.sleep() - se a flag em actionPerformed mudou, aí é só configurar a ação/evento que desejas.
Crie uma Thread para fazer esse método demorado… e no listener você seta esse boolean que você quer… Você tem que usar a Thread porque enquanto ele fica calculando seu programa não permite ler o listener… A thread é um trabalho paralelo a execução do seu programa. Acesse o links abaixo:
Está dando certo ^-^
Eu esotu tentando fazer com que um JButton e uma telcla do teclado altere a variável para o oposto (se estiver false, fica true) que ela está, só falta isso…
Seu código tem um pequeno bug. Quando os botões forem clicados de novo - para desligar - a Thread que será interrompida não será a mesma que está em processamento, já que são objetos anônimos e, portanto, diferentes.
Para contornar isso, ao invés de usar new Thread você faria um objeto Thread e implementaria sua função, para depois no método loop() chamá-lo com um “nomeDaThread.start()” já que seria o mesmo objeto independentemente da vez em que foi chamado.
Crie um boolean static, sete a principio como false dentro do loop e
no actionPerformed() acione como true.
Algo assim:
package testes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Psiu extends JFrame implements ActionListener {
JButton botao;
JFrame janela;
static boolean para = false;
static int num = 0;
public Psiu() {
botao = new JButton("Dar psiu para a gatinha");
botao.addActionListener(this);
janela = new JFrame();
janela.add(botao);
janela.setSize(300,500);
janela.setVisible(true);
}
public void loop () {
if (para == false) {
while(num < 10) {
System.out.println("Sou linda. E estou caminhando pela rua: "+num);
}
}}
@Override
public void actionPerformed(ActionEvent e) {
para = true;
num = 10;
System.out.println("Psiu, passa seu telefone");
System.out.println(para);
loop(); // vai la de novo, só que dessa vez nao vai ter loop
//voce pode criar um novo botão de continue, apenas sete os valores
}
public static void main(String[] args) {
new Psiu().loop();
if (Psiu.para == true) {
System.out.println("Claro!");
}
}
}
Splayer tente sem usar Thread, do jeito que fiz.
Se vc ainda não sabe usar Thread, melhor do jeito que fiz, so uma dica
A Thread vai complicar tua logica… so acho, ate mais!!
Pelo menos não por enquanto!!
Fiz esse exemplo em alguns minutos…Pensei em usar outras possibilidades, mas coloquei so a parte basica:
Fiz a outra parte assim:
Como um numero aleatorio, para definir quais as chances que vc tem de uma garota linda te dar “bom dia”, “oi”, ou alem disso “Ela abrir conversa”, de 0 a 10, sendo essas chances, a mesma ou outras garotas diferentes. O loop estaria infinito, pois você estaria num lugar movimentado, e você seria como alguem que foi procurar realmente isso (uma garota). Neste caso, seria otimo um metodo que fique executando enquanto o programa estiver rodando, ou quando se permitir isso, com opções/menu. Você clica em listar garotas, e tem-se uma lista de 1 a 1000 para você escolher, quem irá fazer a aleatoriedade seria o Random.
No caso, voce teria uma lista (um loop infinito de possibilidades para a noite), você só precisaria dizer algumas palavras. Cada uma delas, teria um, vamos dizer ID, e uma resposta diferente para a sua ‘cantada’.
Bom, fiz aqui, só para descontrair, pois é sexta, e nem sair hoje…Então, imaginação vai longe kkk
Pense no que disse Ada Lovelace sobre máquina analítica, há alguns anos atrás. Hoje as possibilidades continuam as mesmas, afinal de contas;
Quero fazer um programa que faz um Loop e dentro dele, queria que tivesse uma verificação se o metodo ActionListener foi utilizado, se sim, cancele o Loop
Foi o que tinha entendido:
Vai tentando, pegue esse exemplo que fiz, veja o comentario que fiz, onde você pode criar outro actionPerformed(), para o botão iniciar loop novamente.
Você cria um botao para iniciar, dependendo da logica sendo false, e para parar sendo true. Pode até fazer com que o loop continue de onde parou: Mas é bem melhor você pensar em como fazer isso. Passe algumas horas tentando, ou dias. Como eu já fiz com pascal, o esforço vale a pena !