繁体   English   中英

Java计时器不起作用

[英]java timer won't work

为什么不起作用?

我希望它每秒打印一次。

谢谢。

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

public class test2 {

public static void main(String[] args) {

    Timer timer = new Timer(1000, new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            System.out.println("hello");
        }
    });

    timer.start();
    }
}

您的程序终止,计时器甚至无法运行一次。 当main方法终止时,程序终止,所有线程也终止。 这包括您的计时器线程。

请尝试以下操作:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

public class test2 {

    public static void main(String[] args) {

        Timer timer = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                System.out.println("hello");
            }
        });

        timer.start();
        }

        while (true) /* no operation */;
    }
}

计时器可能在守护程序线程中启动,启动后,主线程立即结束。

一旦只剩下守护程序线程,JVM可能/必须终止。 因此,您需要保持主线程处于活动状态。 为了测试目的,一个简单的Thread.sleep(10000); 应该做得很好。

没有什么可以阻止您的代码在调用start之后立即退出。 添加Thread.sleep(10000); timer.start(); 您会看到消息打印。

因为您的程序将在主线程完成后立即退出,并且由于Timer在单独的线程上运行,所以将没有时间执行。 在main方法结束之前添加Thead.Sleep调用将执行您的代码。

您正在使用接口库( java.awt )编写控制台应用程序。

尝试这个:

public static void main(String[] args) throws Exception {
     while(true){
         Thread.sleep(1000);
         System.out.println("hello");
     }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM