Java Swing 计时器未启动?

标签 java swing timer

我编写这个程序是为了测试 Swing 的计时器。它编译得很好,没有运行时错误,但是一启动就停止了,屏幕上没有弹出任何内容。这是我在网上找到的示例代码的稍微修改版本,所以它应该可以正常工作。我不知道代码有什么问题:

import java.awt.event.*;
import javax.swing.*;

public class Time 
{
int sec=0;
int min=0;

public Time()
{
    ActionListener taskPerformer = new ActionListener()
    {
        int sec=0;
        int min=0;
        public void actionPerformed(ActionEvent evt) 
        {
            if(sec==60)
            {
                sec = 0;
                min++;
            }
            System.out.println("Time passed: " + min + ":" + sec);
            if(min==2)
                System.exit(0);
        }
    };
    Timer timer = new Timer( 1000 , taskPerformer);
    timer.start();
}

public static void main(String[] args)
{
    Time timer = new Time();
}
}

最佳答案

javax.swing.Timer 在其核心使用daemon 线程。这意味着一旦 main 方法存在,JVM 就会终止。

您可以尝试使用java.util.Timer或创建某种框架以便启动EDT

旁注:

您没有增加 sec 变量

例如...

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.Timer;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class Time {

    int sec = 0;
    int min = 0;

    public Time() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.pack();
                frame.setLocationRelativeTo(null);

                ActionListener taskPerformer = new ActionListener() {
                    int sec = 0;
                    int min = 0;

                    public void actionPerformed(ActionEvent evt) {
                        if (sec >= 60) {
                            sec = 0;
                            min++;
                        }
                        System.out.println("Time passed: " + min + ":" + sec);
                        if (min == 2) {
                            System.out.println("Terminate");
                            System.exit(0);
                        }
                        sec++;
                    }
                };
                Timer timer = new Timer(1000, taskPerformer);
                timer.start();
            }
        });
    }

    public static void main(String[] args) {
        Time timer = new Time();
    }
}

关于Java Swing 计时器未启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24102757/

相关文章:

java - UI 中的 JList 未反射(reflect)所有对等进程的更改

java - 删除 JTable 底部白色边框

java - 如何让该项目在按下按钮后暂停给定的时间

Android - 每 5 秒循环部分代码

java - 为什么我的 if else 语句(即?: ) does not work?

java - 归并排序应用

java - 如何在java中访问动态字符串数组的元素?

java - 为什么 preparedStmt.setString(1 ,"text' xx"); 不起作用,因为它可能会搞乱查询(Java)?

java - JButton 图像图标不显示 .png 文件

java - 如何让 JFrame 上的 Red[X] 在退出 Java 程序之前等待 n 秒?