从 "Quick Access" 启动时,当 createPartControl 函数失败时关闭 Eclipse ViewPart 选项卡?
Close Eclipse ViewPart tab when createPartControl function fails when launched from "Quick Access"?
创建新 Eclipse ViewPart 时的默认行为是显示新选项卡,而不管 createPartControl 函数中发生了什么。例如,如果没有创建任何东西,没有小部件,什么都没有,将显示一个空白选项卡。我不喜欢这种行为。如果 createPartControl 中的初始化失败,我想关闭该选项卡。
现在,我有一个可以执行此操作的鼠标按钮上下文菜单处理程序,例如
public class MyPartMB3Handler extends AbstractHandler {
@Override
public Object execute(final ExecutionEvent event)
throws ExecutionException {
// Create a view and show it.
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
IWorkbenchPage page = window.getActivePage();
try {
MyPart viewPart = (MyPart)page.showView(MyPart.ID);
if(!viewPart.isCreated()) {
page.hideView(viewPart);
}
}
catch(PartInitException e) {
e.printStackTrace();
}
return null;
}
}
isCreated 函数是一个小技巧,它让我知道我的 ViewPart 初始化是否失败,例如
public class MyPart extends ViewPart {
public static final String ID = "com.myplugin.MyPart";
private Composite _parent = null;
@Override
public void createPartControl(Composite parent) {
if(!MyPlugin.createPartControl(parent) { // Some common part creation code I use.
//PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().hideView(this);
return;
}
_parent = parent;
}
@Override
public void setFocus() {
}
public boolean isCreated() {
return _parent != null;
}
}
当我从 Eclipse "Quick Access" 字段启动此 ViewPart 时出现问题。我现在不拥有处理程序。从我强制执行的异常中,处理程序可能是 org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPartControl 或 org.eclipse.ui.internal.e4.compatibility.CompatibilityView.createPartControl 或 org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create.
我尝试将视图隐藏在 createPartControl 函数中(参见上面的注释行),但 Eclipse 不喜欢那样并抛出了一堆异常。
我想也许我可以在 createPartControl 中抛出 PartInitException,但 Eclipse 告诉我不允许这样做。
那么,从 "Quick Access" 启动时如何获得我的菜单处理程序行为?
一个潜在的问题可能是,是否有 better/proper 实现此行为的方法?
您可以在 createPartControl
完成后通过 运行 和 hideView
异步关闭视图 - 像这样:
@Override
public void createPartControl(Composite parent) {
parent.getDisplay().asyncExec(new Runnable() {
@Override
public void run()
{
getSite().getPage().hideView(MyPart.this);
}
});
创建新 Eclipse ViewPart 时的默认行为是显示新选项卡,而不管 createPartControl 函数中发生了什么。例如,如果没有创建任何东西,没有小部件,什么都没有,将显示一个空白选项卡。我不喜欢这种行为。如果 createPartControl 中的初始化失败,我想关闭该选项卡。
现在,我有一个可以执行此操作的鼠标按钮上下文菜单处理程序,例如
public class MyPartMB3Handler extends AbstractHandler {
@Override
public Object execute(final ExecutionEvent event)
throws ExecutionException {
// Create a view and show it.
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
IWorkbenchPage page = window.getActivePage();
try {
MyPart viewPart = (MyPart)page.showView(MyPart.ID);
if(!viewPart.isCreated()) {
page.hideView(viewPart);
}
}
catch(PartInitException e) {
e.printStackTrace();
}
return null;
}
}
isCreated 函数是一个小技巧,它让我知道我的 ViewPart 初始化是否失败,例如
public class MyPart extends ViewPart {
public static final String ID = "com.myplugin.MyPart";
private Composite _parent = null;
@Override
public void createPartControl(Composite parent) {
if(!MyPlugin.createPartControl(parent) { // Some common part creation code I use.
//PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().hideView(this);
return;
}
_parent = parent;
}
@Override
public void setFocus() {
}
public boolean isCreated() {
return _parent != null;
}
}
当我从 Eclipse "Quick Access" 字段启动此 ViewPart 时出现问题。我现在不拥有处理程序。从我强制执行的异常中,处理程序可能是 org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPartControl 或 org.eclipse.ui.internal.e4.compatibility.CompatibilityView.createPartControl 或 org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create.
我尝试将视图隐藏在 createPartControl 函数中(参见上面的注释行),但 Eclipse 不喜欢那样并抛出了一堆异常。
我想也许我可以在 createPartControl 中抛出 PartInitException,但 Eclipse 告诉我不允许这样做。
那么,从 "Quick Access" 启动时如何获得我的菜单处理程序行为?
一个潜在的问题可能是,是否有 better/proper 实现此行为的方法?
您可以在 createPartControl
完成后通过 运行 和 hideView
异步关闭视图 - 像这样:
@Override
public void createPartControl(Composite parent) {
parent.getDisplay().asyncExec(new Runnable() {
@Override
public void run()
{
getSite().getPage().hideView(MyPart.this);
}
});