我需要检测一个文件(任何类型的)何时在Eclipse中打开,并在发生这种情况时运行一些代码。
我已经尝试过下面的代码,但它似乎调用函数多次:
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().addPartListener(new IPartListener2() {
@Override
public void partOpened(IWorkbenchPartReference partRef) {
System.out.println("File opened");
}
});
}
});
在Eclipse RCP中有办法做到这一点吗?
使用IPartListener2.partOpened
是正确的。请确保只设置一次侦听器。
partOpened
将调用所有部件,因此您需要检查您感兴趣的部件。
@Override
public void partOpened(final IWorkbenchPartReference partRef)
{
// Check for editor reference and get the editor part
if (partRef instanceof IEditorReference &&
partRef.getPart(false) instanceof IEditorPart editorPart) {
// Example getting current IFile being edited:
IFile file = editorPart.getEditorInput().getAdapter(IFile.class);
}
}
注意:示例代码使用Java 16类型模式,对于旧版本将需要修改。
还要注意Display.asyncExec
通常不需要设置这个