所以我想每秒打印一个单词10秒,但没有任何效果 这是我的代码:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
public class Main{
public static void main (String[] args){
class TimerListener implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
System.out.println("helo");
}
}
ActionListener dummy = new TimerListener();
Timer power_up_time = new Timer(10000,dummy);
power_up_time.addActionListener(dummy);
power_up_time.start();
}
}
编辑:所以我添加了启动功能,它仍然无法正常工作
答案 0 :(得分:3)
我认为您需要start
Timer
才能使其发挥作用。
这样的事情:
Timer timer = new Timer(500, new ActionListener() {
public void actionPerformed(ActionEvent e) {
}
});
timer.start();
答案 1 :(得分:2)
在较新版本的Java中(从过去十年左右)我建议使用ScehduledExecutorService
ScheduledExecutorService ses = Executors.newSingleThreadScheduledExecutor();
ses.scheduleAtFixedRate(() -> System.out.println("hello"), 0, 1, TimeUnit.SECONDS);
TimeUnit.SECONDS.sleep(10);
ses.shutdown();
答案 2 :(得分:1)
如果您发布的代码已完成,则您将在应用程序(即主线程)终止之前启动计时器。因此,调度程序将无法运行足够长的时间来执行计时器。
尝试在具有退出条件的循环中休眠或运行(这可能是你想要做的事情)。
答案 3 :(得分:0)
您没有初始化并启动Swing工具包,因此您的应用程序会立即终止。
如果你真的想使用Swing Timer
,你需要至少显示一些窗口或对话框,以便Swing事件线程正在运行,例如将以下内容添加到main()
方法的末尾:
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new JFrame("Frame title").setVisible(true);
}
});
请参阅Swing以外的替代方案的其他答案。