gpt4 book ai didi

java - Eclipse RCP - 在创建 View 后立即添加一个监听器

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:27:34 26 4
gpt4 key购买 nike

问候各位 Stackoverflowians,

我正在开发 Eclipse RCP 应用程序,并且必须在创建后立即将 SelectionListener 添加到 Project Explorer View

我意识到我不能在我贡献的插件的 Activator 中执行此操作,而为了通过 PlatformUI.getWorkbench().getActiveWorkbenchWindow() 获取 SelectionService。 getSelectionService() 我必须有一个 Activity 的工作台窗口(调用 Activator start() 时为 null)

所以我的问题是:我什么时候可以获取 SelectionService 以便创建并显示 Project Explorer View ,但用户还不能“按下任何按钮”?

如有任何意见和建议,我们将不胜感激!

最佳答案

如果您真的想在没有可以在创建时注册 ISelectionListener 的 UI(如 View )的情况下跟踪启动时的用户选择,您可以使用启动 Hook 。

Eclipse 提供扩展点 org.eclipse.ui.startup。它接受一个实现接口(interface) org.eclipse.ui.IStartup 的类。它将在创建 UI 后调用,因此 ISelectionService 已经可用:

public class StartupHook implements IStartup, ISelectionListener {

@Override
public void earlyStartup() {
final IWorkbench workbench = PlatformUI.getWorkbench();
workbench.addWindowListener(new IWindowListener() {

@Override
public void windowOpened(IWorkbenchWindow window) {
addSelectionListener(window);
}

@Override
public void windowClosed(IWorkbenchWindow window) {
removeSelectionListener(window);
}
/* ... */
});

workbench.getDisplay().asyncExec(new Runnable() {
public void run() {
for (IWorkbenchWindow window : workbench.getWorkbenchWindows()) {
addSelectionListener(window);
}
}
});
}

private void addSelectionListener(IWorkbenchWindow window) {
if (window != null) {
window.getSelectionService().addSelectionListener("org.eclipse.ui.navigator.ProjectExplorer", this);
}
}

private void removeSelectionListener(IWorkbenchWindow window) {
if (window != null) {
window.getSelectionService().removeSelectionListener("org.eclipse.ui.navigator.ProjectExplorer", this);
}
}

@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
// TODO handle selection changes
System.out.println("selection changed");
}
}

请注意 it is discouraged to use this UI startup hook因为它迫使 OSGi 很早地激活您的包(所有依赖包也是如此!)并减慢系统启动速度。因此,请确保您的包裹整洁纤细。将 bundle 依赖性降至最低。有时有必要将启动 Hook 代码移动到一个单独的包中以实现这一点。

关于java - Eclipse RCP - 在创建 View 后立即添加一个监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19976105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com