本文主要是介绍文件下载 或者 远程打印 等操作时间太长 造成SWT 无响应 处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
操作场景:远程打印订单 因为打印耗时比较长 大约需要1分钟才能打印出来 而一个下架单里面有很多订单(1000)可能上千票。这样打印就可能需要很长时间 SWT UI界面可能就会死机无响应..
解决方法:采用多线程异步打印..
遇到问题:
1.在UI界面中直接使用Display.getDefault().syncExec/asyncExec 调用打印方法 界面还是会无响应
解决方法:使用多线程 而不是UI线程 因为使用Display.getDefault().syncExec/asyncExec
使用的还是UI主线程.
2. 使用多线程 :非UI线程操作UI界面元素 执行异常
解决方法 : 把UI元素数据获取.封装成对象传递给线程 在线程中操作数据库组成打印所需数据.处理打印。
3.在多线程中直接使用UI 元素设置值 一样会出现非UI线程操作UI界面元素 执行异常
解决方法:使用UI线程如下:
Display.getDefault().syncExec/asyncExec(new Runnable(){
@Override
public void run() {
successLabel.setText(code+""+LanguageSwitchUtil.getString("Printing.ing"));
}
});
4. 使用多线程打印完成后,需要把每个打印失败订单都返回给UI界面,下架单完成后需要返回给UI界面信息(成功完成),用于在界面上 显示
解决方法 : 把 UI控件 传递给线程 回显的时候使用
Display.getDefault().syncExec/asyncExec(new Runnable(){
@Override
public void run() {
successLabel.setText(code+""+LanguageSwitchUtil.getString("Printing.ing"));
}
});
这样界面上就有显示了.
这篇关于文件下载 或者 远程打印 等操作时间太长 造成SWT 无响应 处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!