Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SWT:UI在Mac/Linux的主线程中使用display.async和后台任务缓慢更新_Java_Multithreading_Asynchronous_Swt - Fatal编程技术网

Java SWT:UI在Mac/Linux的主线程中使用display.async和后台任务缓慢更新

Java SWT:UI在Mac/Linux的主线程中使用display.async和后台任务缓慢更新,java,multithreading,asynchronous,swt,Java,Multithreading,Asynchronous,Swt,我有一个后台操作,比如将高达3GB的数据复制到设计目录。同时,我在UI上显示了一个SWT进度条和一个标签,该标签可以异步更新(display.asyncExec)。复制操作在一个新线程内执行,该线程在单击按钮时激活。在复制操作中,我正在更新progressmonitor的mon.worked()方法,该方法更新UI。我正在使用eclipse的IProgressMonitor创建我的monitor类 复制操作几乎不需要2-3分钟(MacOsx 10.8.3 8GB Ram,i7),但UI进度条甚至

我有一个后台操作,比如将高达3GB的数据复制到设计目录。同时,我在UI上显示了一个SWT进度条和一个标签,该标签可以异步更新(
display.asyncExec
)。复制操作在一个新线程内执行,该线程在单击按钮时激活。在复制操作中,我正在更新progressmonitor的
mon.worked()
方法,该方法更新UI。我正在使用eclipse的
IProgressMonitor
创建我的monitor类

复制操作几乎不需要2-3分钟(MacOsx 10.8.3 8GB Ram,i7),但UI进度条甚至还没有完成一半。进度条仅在5-6分钟后显示“完成”。这使得复制操作的时间似乎比预期的要长

我正在更新进度条和标签(显示当前正在复制的文件)

我观察到,当我只更新一个组件时,无论是ProgressBar还是Label,UI都会快速更新

我不想使用display.syncexec来恢复,因为这需要很长时间,而且UI冻结的可能性也很高

我们将非常感谢您在这个问题上给予我的任何帮助/指点


注意:奇怪的是,我在Win 7上没有遇到这个问题。

您多久调用一次
IProgressMonitor.worked
?复制每个文件后,我调用IProgressMonitor.worked()API来更新进度条和标签(文件名)如果有很多小文件,您可能会淹没
asyncExec
事件队列。Eclipse
Search
results视图可能会出现这种情况。您能在更新UI后尝试调用Display.update()吗?@greg-449我能够通过减少更新的频率使ProgressBar显示得更快。但我仍然想知道它如何在Win7上正常工作。