我正在编写一个Java Swing程序。如果我使用以下方法,可能会导致性能下降吗?
jButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SwingWorker worker = new SwingWorker() {
protected Object doInBackground() throws Exception {
return null;
}
protected void done() {
// do stuff
}
};
worker.execute();
}
});如果我在done()中执行一些繁重的处理任务,那么将SwingWorker实例定义为全局成员而不是本地匿名类声明更好吗?
我认为如果它是本地的,那么每次调用actionPerformed时都会创建它(是吗?)。使用全局实例会导致性能的提高吗?在全局/本地方法中内存利用率有什么不同吗?
发布于 2013-08-18 11:51:17
在你的具体例子中,它很容易回答。按照javadoc类中的指定,SwingWorker被设计为只运行一次(请参见this SO question)
SwingWorker只被设计为只执行一次。多次执行SwingWorker不会导致两次调用doInBackground方法。
因此,在本例中,每次调用actionPerformed时都必须创建一个新实例。
附带注意:繁重的处理工作应该在doInBackground方法中完成,而不是在done方法中完成,否则会阻塞EDT。
https://stackoverflow.com/questions/18296698
复制相似问题