我上课了。这个类正在为我的Array点添加新项。这些点正在移动,并从计时器的主体重新绘制一个面板以在新的位置绘制它们。我连接到数据库sqlite。当我调用一个插入函数来添加点到表 - 应用程序冻结1秒。
我想问一下有没有办法不停止绘画/重新绘画?我希望插入操作将在后台进行。
任何想法?
Ps:我听说过摇摆工作者但是idk适合我的情况
编辑:
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;
}
}
您能否举例说明如何将Timer
替换为SwingWorker
?
答案 0 :(得分:2)
将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));
}