我是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.
}
}
}
帮帮我们。非常感谢你。
答案 0 :(得分:1)
最好使用Swing Worker,然后在数据更改时发布结果。这样,在进行数据库查询时就不会阻止EDT。
如果要使用TimerTask,则需要在SwingUtilities.invokeLater()中包装对TableModel的任何更新。
答案 1 :(得分:0)
this.updateTableStatus();
尝试引用MyTimer的updateTableStatus()
方法(但没有这样的方法)。要引用表的updateTableStatus()
方法,您可以将其更改为
Table.this.updateTableStatus();
注意强>:
说真的,我相信从每个客户端每秒检查数据库,看看是否有任何改变是一个非常糟糕的应用程序设计。我建议您发布一个新问题,解释您当前的架构和要求,并询问有关如何有效监视数据库更改的建议。