我有一个简单的viewPart提供一些文本字段来输入selenium测试的参数。在填写这些字段之后,用户可以开始大约的测试。需要30-45分钟才能运行。我希望我的GUI在此测试期间保持活跃状态,让用户有机会做其他事情。我需要一个进度监视器。
我尝试将selenium测试放在包含Display.getDefault()。asyncExec的作业中以运行它。但是我的GUI在几秒钟之后冻结给了busyindicator。 selenium不会更新任何其他视图,而是更新进度监视器。
还有另一种方法可以确保作业不会阻止我的GUI吗?
最佳, 的Mirco
答案 0 :(得分:7)
(a)syncExec
中执行的所有操作都使用显示线程,因此阻止UI返回。我建议你使用Eclipse Jobs。这将使用工作台已经开箱即用的进度指示器。
答案 1 :(得分:0)
我建议将代码拆分为更新UI的代码和执行其他业务的代码。在单独的线程中执行所有操作,当您需要检索或设置某些操作到UI时,请使用“Display.getDefault()。asyncExec”。
Thread thread = new Thread("Testing") {
// some shared members
public void run() {
someBusiness();
// or use syncExec if you need your thread
// to wait for the action to finish
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
// UI stuff here
// data retrieval
// values setting
// actions trigging
// but no business
}
});
someBusiness();
};
thread.start();