每当执行任何基于进程的函数时,我都在使用InvokeAndBlock。例如。
如果我想保存某些内容并且需要一段时间来保存数据,那么我会在代码下面使用。
首先显示流程对话框。
initProcessDialog();
progressDialog.showModeless(); // show process dialog
//Actual process
Display.getInstance().invokeAndBlock(new Runnable() {
public void run() {
saveAll("SAVE_ALL",jobData);
FileUtil.removeBackupFile(jobDataDetail.getJobTemplateFileName());
progressDialog.dispose();
}
});
还在执行任何操作时添加了InvokeAndBlock,这非常耗时。
backButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
initLoadingDialog();
loadingDialog.showModeless();
Display.getInstance().invokeAndBlock(new Runnable() {
public void run() {
}
});
}
});
是否需要修正?
答案 0 :(得分:0)
由于您对invokeAndBlock的调用主要与您自己的代码有关,因此很难说明您在做什么。
dialog.dispose()
内对invokeAndBlock
的来电是错误的。你需要在invokeAndBlock
之后调用它,它将在没有违反EDT的情况下完全相同。
Codename One有一个UI线程:the EDT。
invokeAndBlock
会打开一个单独的帖子,您无权访问任何与UI相关的API。