当前位置: 首页 > 面试题库 >

如何刷新Eclipse View插件

萧浩漫
2023-03-14
问题内容

我基于eclipse插件视图教程创建了一个简单的视图。我添加了一些功能,使我的插件可以侦听调试器上的更改。我的问题是,每次调试器发生问题时,我都希望刷新视图并使用新信息进行更新。这是我所尝试的/正在尝试的:

    public void createPartControl(Composite parent) {

        listener = new DebugContextListener(this);
        DebugUITools.getDebugContextManager().addDebugContextListener(listener);

        // Check if there is an already started debug context
        IAdaptable dc = DebugUITools.getDebugContext();
        if (dc != null) {
                dataCollection.add(new ProxyScope("hi")); // manually injecting data 
                Object o = dc.getAdapter(IStackFrame.class);
                if (o instanceof IStackFrame)
                        setStackFrame((IStackFrame) o);

                viewer.refresh(); // this doesn't work
        }


        viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);

        // Set column lines visible, and create two columns
        Tree tree = viewer.getTree();
        tree.setHeaderVisible(true);
        tree.setLinesVisible(true);

        TreeColumn column1 = new TreeColumn(tree, SWT.LEFT);
        column1.setText("Name");
        column1.setWidth(400);
        TreeColumn column2 = new TreeColumn(tree, SWT.LEFT);
        column2.setText("Value");
        column2.setWidth(200);

        drillDownAdapter = new DrillDownAdapter(viewer);
        viewer.setContentProvider(new VariableViewContentProvider());
        viewer.setLabelProvider(new VariableViewLabelProvider());
        viewer.setSorter(new ViewerSorter());
        viewer.setInput(getViewSite());

....

}

因此,基本上,我将所有这些侦听侦听逻辑放在顶部,该侦听逻辑发生在if语句内部。我知道我的程序可以进入那里。每次发生重大变化时,我都想刷新视图,并且尝试尝试执行viewer.refresh,但该方法不起作用。我的视图显示的信息基于dataCollection对象,因此与dataCollection.add
…对应的行就是我只是手动添加数据,就像调试器做了什么一样。如果我将该行放在if语句之外,那么我的视图就可以工作(我猜这只是我第一次启动该插件时视图的原始结构),但是当我将它放在if语句中时,它就行不通,这表示我的观点永不更新。

感谢您的任何帮助。


问题答案:

createPartControls是视图生命周期的时间,将在其中创建其包含的小部件(当视图最初可见时)。该代码在视图生命周期中仅执行一次,因此您不能在此处直接添加任何内容来刷新视图。

Eclipse部件通常会更新其内容,以响应工作台内部更改的选择(例如,用户可能在调试视图中单击另一个堆栈框架)。我不确定这是否已经完全满足您的需求,但这是一个很好的开始,并且在Eclipse
FAQ中
进行了很好的描述。



 类似资料:
  • 问题内容: 我有一个具有单个 视图* 的 Eclipse插件 (例如eclipse helloworld-view-plugin- project)。在视图文件中 ,我想更新视图时 得到一个 事件 。 *** 在此视图中,我在一个具有多个标签的组中有一个GridData。我有几个 注册到程序的服务,其状态应 在此GridData中显示。 编辑:为了更好地显示我的问题,我更新了这篇文章,并添加了整个

  • 卡片刷新插件提供将 Ajax 内容加载到卡片中的功能。 用法 该插件可以作为 jQuery 插件或使用数据 API 激活。 数据 API 通过向卡片添加带有 data-card-widget="card-refresh" 的按钮来激活插件,并提供所需的 data-source="/内容 URL" 选项。这样,插件将自动创建一个对设置 URL 的 GET 请求,并将返回的内容展示在卡片的 .card

  • 我用碎片制作了一个mediaplayer应用程序;歌曲、专辑、艺术家、流派、播放列表 这是我的一个片段中的代码,我将以艺术家为例 在我的initRecyClaire View()方法中,我有一个名为“项目”的数组列表,其中包含歌曲艺术家。Main.songs.get艺术家- 现在,当用户点击一个艺术家时,另一个活动将启动ListSong sActivity.java 这是类中的代码ListSong

  • 从…起https://spring.io/guides/gs/centralized-configuration/: 您可以强制bean刷新其配置(即从Config Server中提取更新的值),方法是使用Spring Cloud Config@RenewScope注释MessageRestController,然后触发刷新事件。 我们如何触发此刷新事件(对于带有

  • 如何在更改jPanels高度后刷新它?在我编译代码之后,它确实显示了它,但是在我单击两次random按钮(我使用random按钮将高度更改为随机数)之后,它并没有以我想要的方式显示它。 还有安托赫的事。jPanel是颠倒的。我该怎么改变呢? 下面是我到目前为止编写的代码:

  • 问题内容: 我要刷新温斯顿记录仪 前 。 有没有类似的东西?除了人们抱怨温斯顿没有得到非常积极的维护之外,我什么也找不到。 作为替代方案,是否有任何流行的(主动维护的)多传输日志记录框架提供冲洗功能? 问题答案: 实际上,Winston允许您传递在记录所有传输后执行的回调: 文件:https://github.com/flatiron/winston#events-and-callbacks-in