您可以在ApplicationWorkbenchWindowAdvisor.postWindowOpen()
方法中添加您的選擇偵聽器(此時您可以確定工作臺已經創建)。如果你想添加它,當「Project Explorer視圖」獲取可見的,那麼就可以做這樣的事情:
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().addPartListener(new PartAdapter() {
@Override
public void partVisible(IWorkbenchPartReference partRef) {
if ("org.eclipse.ui.navigator.ProjectExplorer".equals(partRef.getId())) {
// add selection listener
}
}
});
UPD: OK,如果你沒有訪問AppliationWorkbenchWindowAdvisor(其很奇怪,如果你正在開發Eclipse RCP產品),那麼ASAIK就沒有乾淨的解決方案來獲得關於UI可用性的通知。所以這樣的解決方案之一可能是添加一個工作,這將等待UI被初始化。在你的插件Activator.start()
方法考慮增加以下工作(確保你可以將它解壓到單獨的類和改進的方法很多,但一開始就應該足夠了):
Job j = new Job("") {
@Override
protected IStatus run(IProgressMonitor monitor) {
final boolean[] workbenchAvailable = new boolean[] { false };
Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
if (PlatformUI.isWorkbenchRunning() && PlatformUI.getWorkbench().getActiveWorkbenchWindow() != null) {
workbenchAvailable[0] = true;
}
}
});
if (workbenchAvailable[0]) {
System.out.println("Workbench is available");
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
ISelectionService selectionService =
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService();
System.out.println(selectionService);
}
});
} else {
System.out.println("Waiting for the Workbench ...");
schedule(1000);
}
return Status.OK_STATUS;
}
};
j.schedule();
你想做什麼選擇?你想在自定義視圖或編輯器中使用它嗎? – isnot2bad
我將在我的插件中使用它來生成特定於每個項目的內容。特別是它將用於運行配置。 –