java - 将数据插入数据库会卡住我的应用程序

标签 java database timer freeze swingworker

我有定时器课。此类正在为我的点数组添加新项目。这些点正在移动,并且从计时器主体中重新绘制面板以将它们绘制到新位置。我已连接到数据库 sqlite。当我调用插入函数向表添加点时 - 应用程序卡住 1 秒。

我想问有什么办法可以不停止绘画/重画吗?我希望插入操作将在后台进行。

有什么想法吗?

PS:我听说过 Swing Worker,但不知道它是否适合我的情况

编辑:

class Generator{
    ChangeListener listener;
    ArrayList<String> s;
    JPanel p;
    Timer generatorTimer;
    MyDatabase b;


    public Generator(){
    this.s = new ArrayList<String>();
    this.b = new MyDatabase();
      generatorTimer = new Timer(40, new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
              addItem();     
              p.repaint();
      }
    });
    generatorTimer.start();
    }
    private void addItem(){
        String newString = new String("sampleText");
        s.add(newString);
        b.insert(newString);  //inserting new item do database
        listener.stateChanged(new ChangeEvent(this));
    }
    public void setPanel(JPanel p){
        this.p = p;
    }

    public ArrayList<String> getArray(){
        return s;
    }   
    public void addListener(ChangeListener list){
        this.listener = list;
    }
}

你能给我举例说明如何用 SwingWorker 替换我的 Timer 吗?

最佳答案

将 addItem 方法更改为如下所示:

private void addItem() {
    final String newString = new String("sampleText");
    s.add(newString);
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            // inserting new item to database
            b.insert(newString);
        }
    };
    new Thread(runnable).start();
    listener.stateChanged(new ChangeEvent(this));
}

关于java - 将数据插入数据库会卡住我的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20316760/

相关文章:

sql-server - 在没有 SQL Server Management Studio 的情况下将数据库从我的开发 PC 移动到客户端 PC?

SwiftUI - 如何制作启动/停止计时器

java - 如果我从 synchronized block 返回,什么时候释放锁?

java - Box2D ChainShape 顶点计数=0

java - 如何在属性类型为varchar(254)的数据库中对长字符串进行编码?

c - 如何在 C 中按下按键退出 time_delay 循环?

积分系统中使用的Javascript计时器

Java股票期权定价库

database - 如何更改sql server 2008的日期格式

Python:支持索引的内存对象数据库?