【问题标题】:Why does java swing timer class not work?为什么 java swing 计时器类不起作用?
【发布时间】:2020-10-27 04:53:25
【问题描述】:

这是我的主要课程

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();
    }  
}

还有我的实现 ActionListener 的类 Loop

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");
       } 
    }
    
}

我不知道为什么?当我完全满足了它的需要但它没有在控制台中打印“它正在工作”时

还有一个问题是“这个 Timer 类是否类似于 java 中的 Thread ?”

感谢您的回答!

【问题讨论】:

    标签: java multithreading swing timer actionlistener


    【解决方案1】:

    您的程序在设置计时器后立即退出,没有机会触发。

    AWT 事件调度线程 (EDT) 需要因某种原因而启动,以使计时器保持活动状态。

    Swing 应该在这个线程中使用。如果你这样做,它应该可以工作。

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

    为了避免缩进大量代码,并有一个简短的main,我倾向于创建一个方法调用go 并使用方法引用。

    java.awt.EventQueue.invokeLater(Test::go);
    
    private static void go() {
    

    【讨论】:

    • 如果我想激活 t.sart() 应该怎么做?
    • 一个 JFrame 类?
    猜你喜欢
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 2012-10-10
    • 2017-03-12
    • 2018-10-06
    • 2010-11-02
    • 2015-04-04
    相关资源
    最近更新 更多