Java 我的插件代码减慢了Eclipse的速度,我可以改进什么?

Java 我的插件代码减慢了Eclipse的速度,我可以改进什么?,java,eclipse,eclipse-plugin,Java,Eclipse,Eclipse Plugin,我有一个ITextViewer对象和一个StyledText小部件,Eclipse在其中显示代码。我想高亮显示由行号定义的一行。因此,我向StyledText对象添加了LineBackgroundListener,并编写了以下代码: private class HighlightLine implements LineBackgroundListener { @Override public void lineGetBackground(LineBackgrou

我有一个ITextViewer对象和一个StyledText小部件,Eclipse在其中显示代码。我想高亮显示由行号定义的一行。因此,我向StyledText对象添加了LineBackgroundListener,并编写了以下代码:

private class HighlightLine implements LineBackgroundListener {

        @Override
        public void lineGetBackground(LineBackgroundEvent event) {
            if (lineToHighlight != -1) {
                int line = ((StyledText) event.widget).getLineAtOffset(event.lineOffset);
                if (line == lineToHighlight) {
                    event.lineBackground = styledText.getSelectionBackground();
                } else if (line == previousLineToHighlight) {
                    event.lineBackground = styledText.getBackground();
                }
                styledText.redraw();
                styledText.update();
            }
        }

    }
这项工作或多或少很好,但问题是,它大大减慢了Eclipse的速度。这可能是因为它必须经常更新小部件,而这不是最佳的。然而,经过大量的试验,我想不出另一种方法来解决这个问题。有什么想法吗?

您不需要这些(昂贵的)电话:

lineGetBackground
在绘制线操作期间被调用,因此不需要重新绘制或更新


注意:如果
StyledText
控件有任何
StyleRange
范围,它们可能会覆盖背景。

仅在更改线条颜色时尝试重新绘制和更新。@WidWing这是一个好主意,但我没有找到一种方法来确定线条颜色是否已更改。谢谢您的提示。问题是,当我删除redraw方法时,线的颜色不再可见。这可能是因为StyleRange正在使用中,您的调用正在干扰它(并且在其他平台上的行为可能会有所不同)。正如我在前面的问题中所说的,如果编辑器正在使用完整的Eclipse表示系统,那么您必须找到一种方法来连接到该系统。
styledText.redraw();
styledText.update();