SWT - 工作区和EPackage注册表浏览

时间:2017-08-21 16:33:28

标签: java swt jface

如何在Workspace Browse中实施EPackages BrowseSWT / jface? 以下代码浏览文件系统而不是工作区。

Button button = new Button(grpModelProperties, SWT.PUSH);
button.setText("Browse Workspace...");
button.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
FileDialog dialog = new FileDialog(getShell(), SWT.NULL);
String path = dialog.open();
if (path != null) {
File file = new File(path);
if (file.isFile())
displayFiles(new String[] { file.toString()});
else
displayFiles(file.list());
}
}
});

我也试过@sambi reddy在SWT Component for choose file only from workspace中提出的解决方案,但我有以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/osgi/util/NLS
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.eclipse.ui.dialogs.SelectionDialog.<clinit>(SelectionDialog.java:55)
at mypackage.FrontPage.createControl(FrontPage.java:38)
at org.eclipse.jface.wizard.Wizard.createPageControls(Wizard.java:175)
at org.eclipse.jface.wizard.WizardDialog.createPageControls(WizardDialog.java:705)
at org.eclipse.jface.wizard.WizardDialog.createContents(WizardDialog.java:597)
at org.eclipse.jface.window.Window.create(Window.java:430)
at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1096)
at org.eclipse.jface.window.Window.open(Window.java:792)
at mypackage.ReservationWizard.main(ReservationWizard.java:76)
Caused by: java.lang.ClassNotFoundException: org.eclipse.osgi.util.NLS
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 21 more

我也不了解EPackages浏览。

修改 当我运行以下代码时,虽然工作空间有项目,但没有可用的条目:

Button button2 = new Button(grpModelProperties1, SWT.PUSH);
button2.setText("Browse Workspace...");
final GridData button2Data = new GridData(SWT.RIGHT, SWT.CENTER, true, true);
button2.setLayoutData(button2Data);
button2.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e2) {
    ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(
    Display.getDefault().getActiveShell(), 
    new WorkbenchLabelProvider(), 
    new BaseWorkbenchContentProvider());
    dialog.open();
}
});

1 个答案:

答案 0 :(得分:1)

您只能在Eclipse插件中访问Eclipse工作区,因为需要进行大量初始化,所以它在普通的Java应用程序中不可用。

ElementTreeSelectionDialog对话框中,您必须致电setInput告诉对话框有关要显示的元素:

ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(
                Display.getDefault().getActiveShell(),
                new WorkbenchLabelProvider(),
                new BaseWorkbenchContentProvider());

dialog.setInput(ResourcesPlugin.getWorkspace().getRoot());

dialog.open();

这将显示整个工作区,通过更改IProject或IFolder的输入,您可以将显示限制为工作区的一部分。