如何在 SWT/jface
中实现 Workspace Browse
和 EPackages Browse
?
下面的代码浏览文件系统而不是工作区。
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());
}
}
});
我还尝试了 SWT Component for choose file only from workspace 中提出的解决方案作者:@sambi reddy 但我有以下错误:
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();
}
});
最佳答案
您只能在 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 的输入,您可以将显示限制为工作区的一部分。
关于java - SWT - 工作区和 EPackage 注册表浏览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801906/