我正在重构一些运行多阶段过程的代码。每个步骤都在嵌套的java.awt.EventQueue.invokeLAter
.... 调用中。它看起来有点像这样:
import java.awt.EventQueue;
public class NestedInvokeLater {
/**
* @param args
*/
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
changeTabPanel();
copySomeFiles();
enableNextButton1();
upDateProgressBar(10);
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
readInFiles();
doSomethingToFiles();
upDateProgressBar(15);
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
doSomethingElse();
upDateProgressBar(100);
}
});
}
});
}
});
};
}
我在 Java 方面还不够新,所以我不明白嵌套这些调用以向 EDT 添加“作业”的意义,而且我也不是 100% 有信心摆弄这些调用。我想我了解invokeLater调用的作用以及每个步骤的作用。如果这种理解是错误的,请纠正我:
invokeLater用于将一些调用添加到要在 Event Dispatch 线程中完成的作业列表中。Java 然后处理每次调用何时/如何完成,确保 EDT 和 GUI 在“后台”执行作业时不会锁定。
嵌套这些调用告诉我,我们应该排队一组作业,其中一个是排队一些东西,这将排队一些作业......其中一个是排队一些东西。但是只有在前一个工作完成后,第一个内部调用才会排队。一切都是按顺序发生的(这符合我对整个过程的理解),但我不明白为什么要使用嵌套请求来排队作业。如果我从头开始编写,我会为每次调用创建函数并依次调用它们。
我认识到,作为 Java 的新手,我可能会遗漏一些使这种嵌套变得重要的巨大东西。但是没有这方面的文档,代码中也没有关于嵌套的评论。
我错过了什么?什么,如果这段代码有什么意义的话?