2012-03-27 91 views
0

我想使用eclipse的FileFolderSelectionDialog,因为我需要一个可以选择文件夹和文件的对话框。有2个按钮(一个用于文件夹(DirectoryDialog)和一个用于文件(FileDialog))对我来说就像是糟糕的UI设计,因此使用FileFolderSelectionDialog。使用月食的FileFolderSelectionDialog

但是,似乎没有任何示例代码示范如何正确使用它。即使是进口的FileFolderSelectionDialog所有依赖关系到我的项目后,我仍然得到一个错误:

Exception in thread "main" java.lang.ExceptionInInitializerError 
at org.eclipse.ui.internal.ide.dialogs.FileFolderSelectionDialog.<init>(FileFolderSelectionDialog.java:237) 
at com.cardboardengine.modulebuilder.ui.ImportAssetsDialog$1.widgetSelected(ImportAssetsDialog.java:76) 
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240) 
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) 
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165) 
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754) 
at com.cardboardengine.modulebuilder.ui.ImportAssetsDialog.open(ImportAssetsDialog.java:43) 
at com.cardboardengine.modulebuilder.ui.MainWindow$2.widgetSelected(MainWindow.java:115) 
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240) 
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053) 
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165) 
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754) 
at com.cardboardengine.modulebuilder.ui.MainWindow.open(MainWindow.java:52) 
at com.cardboardengine.modulebuilder.ui.MainWindow.main(MainWindow.java:36) 
Caused by: java.lang.IllegalStateException: Workbench has not been created yet. 
    at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:92) 
    at org.eclipse.ui.internal.ide.dialogs.FileFolderSelectionDialog$FileLabelProvider.<clinit>(FileFolderSelectionDialog.java:43) 
    ... 16 more 

我不完全知道如何解决这个错误。 getWorkbench函数返回和IWorkbench类型,并且根据API参考,此接口不应该由客户端实现(不完全确定相关性如何)。我对调用FileFolderSelectionDialog代码很简单:

FileFolderSelectionDialog assetLoc = new FileFolderSelectionDialog(shlImportAssets, true, IResource.FILE | IResource.FOLDER | SWT.APPLICATION_MODAL); 
      assetLoc.open(); 

,所以我想我在总结的问题是:我怎么使用org.eclipse.ui.internal.ide.dialogs.FileFolderSelectionDialog?

回答

0

它看起来像你正在写一个简单的SWT应用程序。有问题的类不能用于这种情况。您只能在构建于Eclipse Rich Client Platform(RCP)之上的应用程序中使用它。 RCP具有工作台的概念,比SWT高一层。

如果您对RCP感兴趣,我没有特定的文章或书籍可供推荐,但是如果您搜索“Eclipse RCP Tutorial”这样的术语,您会发现很多匹配。