我正在阅读sun java教程,我在这里看到了这个页面:
在标题下,“小程序中的主题”我找到了这段代码:
//Background task for loading images.
SwingWorker worker = (new SwingWorker<ImageIcon[], Object>() {
public ImageIcon[] doInBackground() {
final ImageIcon[] innerImgs = new ImageIcon[nimgs];
...//Load all the images...
return imgs;
}
public void done() {
//Remove the "Loading images" label.
animator.removeAll();
loopslot = -1;
try {
imgs = get();
} ...//Handle possible exceptions
}
}).execute();
}
首先我是新人,所以如果这是一个愚蠢的问题,我很抱歉。但是我从来没有听说过“.excecute()”。我不明白,我无法从谷歌找到任何关于它的东西。我看到这里是......一个匿名的内部阶级? (请纠正我),它正在启动一个加载图像的线程。我以为通过调用start()来调用run()方法?请帮我清除这种困惑。
答案 0 :(得分:7)
execute
是SwingWorker
的一种方法。你看到的是anonymous class被实例化并立即调用execute
方法。
我不得不承认,我对代码编译感到有些惊讶,因为它似乎将execute
的结果分配给worker
变量,文档告诉我们{{ 1}}是execute
函数。
如果我们稍微解构一下代码,那就更清楚了。首先,我们创建一个扩展void
的匿名类并同时创建它的一个实例(这是括号中的大部分):
SwingWorker
然后我们调用SwingWorker tmp = new SwingWorker<ImageIcon[], Object>() {
public ImageIcon[] doInBackground() {
final ImageIcon[] innerImgs = new ImageIcon[nimgs];
...//Load all the images...
return imgs;
}
public void done() {
//Remove the "Loading images" label.
animator.removeAll();
loopslot = -1;
try {
imgs = get();
} ...//Handle possible exceptions
}
};
并将结果分配给execute
(在我看来,这不应该编译):
worker
更新:事实上,我尝试了它doesn't compile。所以不是很好的示例代码。这将编译:
SwingWorker worker = tmp.execute();
答案 1 :(得分:1)
.execute()
正在匿名类的实例上调用execute方法;即new SwingWorker<ImageIcon[], Object>(){...}
创建的对象。 (这是一个扩展SwingWorker
类的类。)
根据javadoc,execute
方法调度要在现有工作线程上执行的实例所表示的任务。工作线程的生命周期(例如创建,启动等)由Swing基础设施负责。