Oto moja główna klasa

import javax.swing.Timer;

public class Test {
    public static int k=9;
    public static void main(String[] args) {
        
        Timer t = new Timer(100, new Loop());
        t.start();
    }  
}

I moja klasa pętla , która implementuje działanieListener

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Loop implements ActionListener {    
    @Override
    public void actionPerformed(ActionEvent e) {
       if(Test.k==9){
           System.out.println("Its's Working");
       } 
    }
    
}

Nie wiem dlaczego? Kiedy w pełni potrzebuję, ale nie drukuje "pracy" w konsoli

I jeszcze jedno pytanie brzmi: "Czy ta klasa czasu podobna do wątku w Javie?"

Dzięki za odpowiedź!

1
DEV-WEB 27 październik 2020, 07:53

1 odpowiedź

Najlepsza odpowiedź

Twój program natychmiast wychodzi natychmiast po stwierdzeniu timera, dając mu brak szans na ogień.

Wątek wysyłki zdarzenia AWT (EDT) będzie musiało rozpocząć z jakiegoś powodu, aby timer pozostał przy życiu.

Huśtawka ma być użyta z tego wątku. Jeśli to zrobisz, powinien działać.

    java.awt.EventQueue.invokeLater(() -> {     
        Timer t = new Timer(100, new Loop());
        t.start();
    });

Aby uniknąć wcięcia wielu kodu, a mieć krótki main, mam tendencję do tworzenia wywołania metody go i użyj odniesienia metody.

java.awt.EventQueue.invokeLater(Test::go);

private static void go() {
1
Tom Hawtin - tackline 27 październik 2020, 05:23