TimerTask只运行一次

时间:2013-06-18 11:36:51

标签: java swing timertask javax.swing.timer

我有一个名为timer的任务:

timer.schedule(new task1(), 1000*minutes);

任务:

class task1 extends TimerTask {
        @Override

    public void run()
    {
            try {
                task();
            } catch (SAXException ex) {
                Logger.getLogger(task1.class.getName()).log(Level.SEVERE, null, ex);
            } catch (ParserConfigurationException ex) {
                Logger.getLogger(task1.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(task1.class.getName()).log(Level.SEVERE, null, ex);
            } catch (URISyntaxException ex) {
                Logger.getLogger(task1.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InterruptedException ex) {
                Logger.getLogger(task1.class.getName()).log(Level.SEVERE, null, ex);
            }
    }
    public void task() throws SAXException, ParserConfigurationException, IOException, URISyntaxException, InterruptedException {
        Pinner_xml t = new Pinner_xml();
        t.xml(frame.t1.getText());

        frame.output.append("task 1 \n");
        System.out.println("task 1 is running");
    }
}

frame是我的框架名称,output是一个文本框。 为什么我在Netbeans的输出对话框中运行任务是“任务1正在运行”,任务只运行一次。

3 个答案:

答案 0 :(得分:9)

使用javax.swing.Timer进行Swing,因为一切都是在EDT上完成的(默认情况下),使用Timer Class,这是先决条件,请参阅how to use Timerupdating JButton on a Timer的另一个相关示例以及working with Swing TimerScrolling Text

的另一个示例

答案 1 :(得分:5)

对于重复执行任务,请使用Timer.schedule(TimerTask task, long delay, long period)scheduleAtFixedRate方法

答案 2 :(得分:3)

阅读有关Timer的文档有重复执行任务的另一个重写方法,您使用的方法只执行一次您可以使用

  

scheduleAtFixedRate(TimerTask任务,长延迟,长时间段)

  

计划(TimerTask任务,长延迟,长期)