gpt4 book ai didi

java - 如何使用 IWorkspaceRunnable 安排或加入一组更改?

转载 作者:行者123 更新时间:2023-11-29 05:37:59 25 4
gpt4 key购买 nike

背景

我正在通过 Eclipse PDE 开发一个插件,我在创建标记时遇到了生成太多 ResourceChangeEvents 的问题(每次调用 setAttribute(..) 和 file.createMarker(. .), 所以我想将所有代码缩减为单个更改事件)。因此,我尝试使用 IWorkspaceRunnable 对工作区的一组更改进行批处理。

问题

我想等到 workspace.run(..) 完成后再返回我的变量“MarkerField.marker_”(否则我会返回“null”)。例如,如果我使用 Eclipse 的作业管理器,我可以使用 Job.join() 让我的调用线程等待作业完成。那么,有没有办法让调用线程等待 workspace.run(..) 完成?

// Generates and returns a marker given absolute position
public static IMarker generateMarker(final IFile file, final String message, final String markerType,
final int severity, final int priority, final int start,
final int end)
throws CoreException, BadLocationException,
IOException
{
// Setting up "line" for marker generation.
final int line = ResourceUtility.convertToDocument(file).getLineOfOffset(start);

IWorkspace workspace = ResourceUtility.getWorkspace();

IWorkspaceRunnable operation = new IWorkspaceRunnable()
{

public void run(IProgressMonitor monitor) throws CoreException
{
// Marker generation code...
IMarker marker = file.createMarker(markerType);

marker.setAttribute(IMarker.MESSAGE, message);
marker.setAttribute(IMarker.PRIORITY, priority);
marker.setAttribute(IMarker.LINE_NUMBER, line + 1);
marker.setAttribute(IMarker.CHAR_START, start);
marker.setAttribute(IMarker.CHAR_END, end);
marker.setAttribute(IMarker.SEVERITY, severity);

MarkerField.marker_ = marker;
}
};
workspace.run(operation, null);

// Check/wait until the thread is finished.
return MarkerField.marker_; //I want to ensure this is non-null!
}

// Wrapper class to return marker instance in generate marker methods
// Effectively works as a pointer to a pointer
static class MarkerField
{
@SuppressWarnings("null") public static IMarker marker_;
}

最佳答案

org.eclipse.core.resources.WorkspaceJobJob 的特殊版本,它包含工作区调用以减少资源更改事件的数量。为此,您覆盖 runInWorkspace 方法而不是正常的 run

如果你使用它,你可以使用 join(另请参阅 JobManager.join,它允许你等待一系列作业并有一个进度监视器)。

关于java - 如何使用 IWorkspaceRunnable 安排或加入一组更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18751551/

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