Timer和timerTask小问题

时间:2013-05-18 20:39:39

标签: java

我是java的菜鸟。这是我第一次在java中使用timer和timerTask类。

我的应用目的:

这是用MySQL实现的多客户端应用程序。我的应用程序是重复读取我的数据库数据。如果数据库更新,那么我也希望每个客户的面板都更新。所以我假设我需要一个计时器类,它可以自动执行读取我的数据库的重复查询,然后对客户端组件进行一些更改。

问题:

我看起来想了一些教程,我发现这样做。由于this.updateTableStatus()方法在我的Table类中,我如何在MyTimer(timerTask)类中使用该方法。

public class Table extends javax.swing.JFrame {

    public Table() {
        initComponents();
        MyTimer myTime = new MyTimer();

    }
    public void updateTableStatus(){
        // this is where I refresh my table status which is reading database data and make some change.
    }

    class MyTimer extends TimerTask{
        public MyTimer() {
            Timer timer = new Timer();
            timer.scheduleAtFixedRate(this, new java.util.Date(), 1000);
        }
        public void run(){

            this.updateTableStatus();   // this is not working!!!, because they r not in the same class.  I need help to solve this problem.
        }
    }
}

帮帮我们。非常感谢你。

2 个答案:

答案 0 :(得分:1)

最好使用Swing Worker,然后在数据更改时发布结果。这样,在进行数据库查询时就不会阻止EDT。

如果要使用TimerTask,则需要在SwingUtilities.invokeLater()中包装对TableModel的任何更新。

答案 1 :(得分:0)

this.updateTableStatus();尝试引用MyTimer的updateTableStatus()方法(但没有这样的方法)。要引用表的updateTableStatus()方法,您可以将其更改为

Table.this.updateTableStatus();

注意
说真的,我相信从每个客户端每秒检查数据库,看看是否有任何改变是一个非常糟糕的应用程序设计。我建议您发布一个新问题,解释您当前的架构和要求,并询问有关如何有效监视数据库更改的建议。