我正在尝试查找当前选定的项目/文件,到目前为止我找到的所有方法都使用ISelectionService
。我发现获取它的实例的方式是:
ISelectionService selectionService = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
但不幸的是.getActiveWorkbenchWindow()
返回null,因为我不在UI-Thread内。有没有什么好方法可以从UI-Thread外部获取ISelectionService?
答案 0 :(得分:0)
您可以使用:
Display.getDefault().synchExec(runnable);
在UI线程中运行Runnable
,您可以在其中获取选择服务。
然而,大多数UI代码都希望在UI线程中运行,因此您可能需要使用syncExec
或asyncExec
来处理与UI有关的任何内容。
答案 1 :(得分:0)
很可能你是在关注错误的appraoch。您应该在运行非UI /后台线程之前>>获取所选项目或文件。
如果您的后台线程是由用户交互触发的,并且应该对所选资源(项目/文件)进行操作,那么当线程到达查询选择的点时,选择可能会发生变化。
相反,评估UI线程上的选择并将提取的资源作为参数传递给后台线程。
例如(简化代码):
// on the UI thread:
IResource resource = ( IResource )getSelectionService().getSelection().getFirstElement();
new Thread( new Runnable() {
public void run() {
resource.copy( ... ); /// or whatever should be done with the resource
}
} ).start();