我有定时器课。此类正在为我的点数组添加新项目。这些点正在移动,并且从计时器主体中重新绘制面板以将它们绘制到新位置。我已连接到数据库 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/