带线程的java中的计时器?

时间:2015-12-02 11:38:29

标签: java multithreading timer

我使用下面的代码每x次打开一帧-1但是当我转到另一帧并返回定时器重置本身导致第二帧-1出现 这是有问题的,因为我一次只需要1个试图使用isvisbile()但是也不起作用。

以下是代码:

 int timerTimeInMilliSeconds2 = 30000;
    javax.swing.Timer timer2 = new javax.swing.Timer(timerTimeInMilliSeconds2, new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            Pop p=new Pop();
            p.setVisible(true);
            new Thread(){
                  @Override
                  public void run() {
                       try {
                              Thread.sleep(5000); // time after which pop up will be disappeared.
                              p.dispose();
                       } catch (InterruptedException e) {
                              e.printStackTrace();
                       }
                  };
            }.start();

        }
    });
    timer2.start();

2 个答案:

答案 0 :(得分:0)

不要将Pop p对象作为您方法中的局部变量,而是将其作为类的成员。当actionPerformed触发器检查它是否为空时(p更好的名称也是一个好主意)并且只创建窗口。

不是在5秒后创建一个线程来处理窗口,而是应该使用另一个Timer

答案 1 :(得分:0)

你的问题有点不清楚。根据我的理解,您需要创建Pop p作为已定义类的成员变量而不是方法actionPerformed的局部变量,以便您可以在触发它之前检查对象是{{1}或不。