gpt4 book ai didi

java - 在编辑器上绘图时卡住 UI

转载 作者:行者123 更新时间:2023-12-01 21:33:54 24 4
gpt4 key购买 nike

我正在编写一个 Eclipse 插件,旨在使 Eclipse XML 编辑器的行为类似于 Java 编辑器。所需的功能之一是突出显示所选区域的所有出现位置(单词、行、字符...)。只要您处理小文件,这就可以正常工作。

但是当我开始处理大文件(例如 2000 行代码)时,UI 在处理突出显示所需的时间内卡住。虽然只有 1 秒或更短的时间,但对于用户来说可能会很烦人。当我的听众被触发时,这些“卡住”就会发生,所以:

  • 输入已更改(添加或删除内容)
  • 用户创建了一个新选择(他单击了文档上的某处)。

我当前启动突出显示过程的代码如下:

try{
if (isValidContext(fText, input))
{
if (textSelection == null)
xmlH = new XMLHighlighter(fText, input);
else
xmlH = new XMLHighlighter(fText, input, textSelection);

Display.getDefault().asyncExec(new Runnable(){
@Override
public void run(){
try{
xmlH.highligth();
} catch (Exception e){
e.printStackTrace();
}
}
});
}
} catch (Exception e){
e.printStackTrace();
}

我认为运行一个新的 Runnable 将使此操作完全独立于 UI 中同时执行的其他操作。我错了吗?

我认为这段代码是造成滞后的原因。也许你会以其他方式看到它?

感谢您的阅读。

最佳答案

Display.asyncExec 尽快在UI 线程中运行Runnable。在这种情况下,当您已经处于 UI 线程中时使用它并不会真正实现任何目标。

您必须使用后台线程、Eclipse JobProgressMonitorDialogIProgressService.run 甚至 CompleteableFuture code> 在后台运行长时间运行的代码。使用后台代码中的Display.asyncExec来更新UI。

还要注意,Eclipse 文本编辑器支持代码提供了一个非常复杂的系统,用于在后台进行语法突出显示等操作。查看诸如 SourceViewerConfigurationIPresentationReconcilerIPartitionTokenScannerIPresentationDamagerIPresentationRepairer 等内容。 Eclipse“新建插件项目”向导甚至会使用这些类为您创建 XML 编辑器的轮廓作为示例之一。

关于java - 在编辑器上绘图时卡住 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37164526/

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