InvokeAndBlock导致EDT违规,每次我在showModeless对话框后使用

时间:2016-02-05 08:43:38

标签: java codenameone

每当执行任何基于进程的函数时,我都在使用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() {  

            }
        });
    }
});

是否需要修正?

1 个答案:

答案 0 :(得分:0)

由于您对invokeAndBlock的调用主要与您自己的代码有关,因此很难说明您在做什么。

dialog.dispose()内对invokeAndBlock的来电是错误的。你需要在invokeAndBlock之后调用它,它将在没有违反EDT的情况下完全相同。

Codename One有一个UI线程:the EDT

invokeAndBlock会打开一个单独的帖子,您无权访问任何与UI相关的API。