Windows 10 SWT FileDialog缺少windows 10上的导航栏
我有一个小的EclipseRCP应用程序 我注意到在windows 10上,FileDialog没有可用的路径部分 在对话框初始化期间,我尝试了不同的Windows 10 SWT FileDialog缺少windows 10上的导航栏,windows-10,swt,eclipse-rcp,Windows 10,Swt,Eclipse Rcp,我有一个小的EclipseRCP应用程序 我注意到在windows 10上,FileDialog没有可用的路径部分 在对话框初始化期间,我尝试了不同的Style标志组合,但没有成功 值得一提的是,在Windows7上一切正常 windows 10上没有导航栏: 期望值: 对该问题的进一步调查我得出以下结论: 如果从WorkbenchHadvisor启动该对话框,则该对话框将与导航栏一起正确显示 代码基本上是这样的: @Override public Object start(IApplic
Style
标志组合,但没有成功
值得一提的是,在Windows7上一切正常
windows 10上没有导航栏:
期望值:
对该问题的进一步调查我得出以下结论:
如果从WorkbenchHadvisor
启动该对话框,则该对话框将与导航栏一起正确显示
代码基本上是这样的:
@Override
public Object start(IApplicationContext context) throws Exception {
try {
int returnCode = PlatformUI.createAndRunWorkbench(display, new WorkbenchAdvisor() {
@Override
public void postStartup() {
// THIS MAKES THE DIALOG APPEAR WITHOUT NAVIGATION BAR
Display display = new Display();
Shell shell = new Shell(display);
FileDialog dialog = new FileDialog (shell, SWT.OPEN | SWT.MULTI);
dialog.open();
shell.close();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) {
display.sleep ();
}
}
}
});
if (returnCode == PlatformUI.RETURN_RESTART) {
return IApplication.EXIT_RESTART;
}
return IApplication.EXIT_OK;
} finally {
Display.getDefault().dispose();
}
return IApplication.EXIT_OK;
}
启动工作台后,我需要能够正确启动FileDialog
如果我执行以下操作,对话框将正确显示在导航栏中,但这不是所需的:
@Override
public Object start(IApplicationContext context) throws Exception {
// THIS MAKES THE DIALOG APPEAR WITH THE NAVIGATION BAR CORRECTLY
Display display = new Display();
Shell shell = new Shell(display);
FileDialog dialog = new FileDialog (shell, SWT.OPEN | SWT.MULTI);
dialog.open();
shell.close();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) {
display.sleep ();
}
}
Display.getDefault().dispose();
return IApplication.EXIT_OK;
}
我仍然不知道如何解决这个问题,或者到底发生了什么
另一条信息是,如果我使用启动配置从eclipse启动RCP,它会正常工作,即使我在
WorkbenchHadVisor
中启动它,文件对话框也会与导航栏一起出现,我建议您使用org.eclipse.ui.startup
扩展名。您可以在plugin.xml上声明它
此扩展要求您提供一个实现IStartup
接口的类。此类“earlyStartup
方法在WorkbenchHadVisor.postStartup之后运行
这时可能会出现导航栏。只是猜测:您是否尝试使用
Display.getDefault()
而不是创建一个新的导航栏?是的,我尝试了Display.getDefault()
,但没有区别,我检查了它的主体,发现它基本上回到了newdisplay()
如果之前没有初始化任何显示,那么它也差不多。我还尝试了PlatformUI.getWorkbench().getDisplay()当我从WorkbenchHadVisor
postStartup
方法中执行时,这与使用IPlatformRunnable
而不是iaApplication
一样有效。