代码之家  ›  专栏  ›  技术社区  ›  Roshana Pitigala Laxmansinghsodhanohdiyala

手动调用对javax.swing.timer执行的操作

  •  0
  • Roshana Pitigala Laxmansinghsodhanohdiyala  · 技术社区  · 6 年前

    以下计时器工作正常。

    private static final Timer TICK_HOUR = new Timer(3600000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            // ...
        }
    });
    

    我要做的是 actionPerformed() 手动。我怎样才能做到这一点?


    这个问题对读者来说似乎不清楚,我会尽力解释更多。

    计时器每小时进行一次处理。我想在不干扰计时器进程的情况下,随时进行。

    3 回复  |  直到 6 年前
        1
  •  1
  •   MadProgrammer    6 年前

    private static final Timer TICK_HOUR = new Timer(3600000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("OK");
        }
    });
    

    你应该把工作外部化 ActionListener

    private static final Timer TICK_HOUR = new Timer(3600000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            doReallyImportantWorkEveryHour();
        }
    });
    

    Timer doReallyImportantWorkEveryHour 当你想解决基本问题时

    private static final timer tick_hour=新计时器(3600000,new actionListener()){
    已执行的公共无效操作(actionevent e){
    })(二)
    

    定时器 监听器 .

    这意味着你想尝试做一些像…

    private static final Timer TICK_HOUR = new Timer(3600000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            TICK_HOUR.getActionListeners()[0].actionPerformed(null);
        }
    });
    

    NullPointerException 监听器

    定时器 监听器

    那么是的,你可以用…

    ActionEvent evt = new ActionEvent(
                    TICK_HOUR, 
                    0, 
                    TICK_HOUR.getActionCommand(), 
                    System.currentTimeMillis(),
                    0);
    for (ActionListener listener : TICK_HOUR.getActionListeners()) {
        listener.actionPerformed(evt);
    }
    

    品牌。

    本身…

    public class ManuallyTimer extends Timer {
    
        public ManuallyTimer(int delay, ActionListener listener) {
            super(delay, listener);
        }
    
        public void tigger() {
            ActionEvent evt = new ActionEvent(TICK_HOUR, 0, TICK_HOUR.getActionCommand());
            fireActionPerformed(new ActionEvent(this, 0, getActionCommand(),
                            System.currentTimeMillis(),
                            0));
        }
    }
    
        2
  •  1
  •   Lino    6 年前

    static-initializer ActionListener Timer

    private static final Timer TICK_HOUR;
    
    static{
        ActionListener listener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // ...
            }
        };
    
        TICK_HOUR =  = new Timer(3600000, listener);
    
        listener.actionPerformed(/* someEvent */);
    }
    

    listener 变量作为类级静态变量,然后从代码的其他地方调用它:

    private static final ActionListener LISTENER = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
            // ...
        }
    };
    
    private static final Timer TICK_HOUR = new Timer(3600000, LISTENER);
    

    LISTENER.actionPerformed(/* someEvent */);
    
        3
  •  0
  •   Roshana Pitigala Laxmansinghsodhanohdiyala    6 年前

    使用 getActionListeners()


    返回:

    ~Java doc~

    TICK_HOUR.getActionListeners()[0].actionPerformed(null);
    

    ArrayIndexOutOfBoundsException 如果没有 ActionListener