这个java .execute()方法调用是什么意思?

时间:2012-05-25 11:34:20

标签: java multithreading applet

我正在阅读sun java教程,我在这里看到了这个页面:

How to Make an Applet

在标题下,“小程序中的主题”我找到了这段代码:

   //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()方法?请帮我清除这种困惑。

2 个答案:

答案 0 :(得分:7)

executeSwingWorker的一种方法。你看到的是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基础设施负责。