如何显示最新的Eclipse错误日志条目
在Eclipse错误日志中创建一个新条目之后,我希望用户能够看到它,即使他们之前在日志视图中向下滚动过如何显示最新的Eclipse错误日志条目,eclipse,Eclipse,在Eclipse错误日志中创建一个新条目之后,我希望用户能够看到它,即使他们之前在日志视图中向下滚动过 org.osgi.framework.Bundle bundle = ...; ILog log = myPlatform.getLog(bundle); log.log(status); 然后我想让UI视图滚动到那个新项目,这样用户就可以看到它了。我该怎么做呢 所以似乎没有任何合适的API来实现这一点。我必须在日志中注册一个监听器,并使用反射使顶部的项目滚动到视图中 /* (non-Jav
org.osgi.framework.Bundle bundle = ...;
ILog log = myPlatform.getLog(bundle);
log.log(status);
然后我想让UI视图滚动到那个新项目,这样用户就可以看到它了。我该怎么做呢 所以似乎没有任何合适的API来实现这一点。我必须在日志中注册一个监听器,并使用反射使顶部的项目滚动到视图中
/* (non-Javadoc)
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
// other stuff here
Platform.addLogListener(new ScrollToLatestLogListener());
}
public class ScrollToLatestLogListener implements ILogListener {
@Override
public void logging(IStatus status, String plugin) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
IViewPart part = getWorkbench().getActiveWorkbenchWindow().getActivePage().findView("org.eclipse.pde.runtime.LogView");
if (part != null) {
ErrorLogAction action = new ErrorLogAction();
action.setActivePart(null, part);
action.run(null);
}
}
});
}
}
幸运的是,一位同事已经实现了这一点,来做真正的工作:
public class ErrorLogAction implements IObjectActionDelegate, IViewActionDelegate {
IWorkbenchPart part;
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
part = targetPart;
}
public void run(IAction action) {
try {
Field treeField = part.getClass().getDeclaredField("fTree");
treeField.setAccessible(true);
Tree treeWidget = (Tree)(treeField.get(part));
if(!treeWidget.isDisposed()) {
TreeItem[] treeItems = treeWidget.getItems();
if((treeItems != null) && (treeItems.length > 0)) {
treeWidget.setTopItem(treeItems[0]);
}
}
} catch(Exception e) {
e.printStackTrace();
}
part.getSite().getSelectionProvider().setSelection(null);
}
public void selectionChanged(IAction action, ISelection selection) {
}
public void init(IViewPart view) {
part = view;
}
}
只是一个提示,但不是简单地调用
showView(errorLogViewId)
会自动执行吗?@rlegendi实际上不会。如果错误视图关闭,它会显示错误视图,但不会滚动到顶部。它看起来像是滚动到以前选择的日志项。我想确保最上面的日志条目在视图中。啊,好的,很高兴听到mate:-)