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

标签 java swt jface

如何在 SWT/jface 中实现 Workspace BrowseEPackages 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/

相关文章:

java - JFace TableViewer 像 Excel 一样在单元格上绘制矩形

java - 在 SWT UI 中删除窗口边框会禁用重新定位

java - 通过在 SWT 中调用另一个类的方法来呈现另一个类的 GUI?

java - 以编程方式触发切片器选择上的数据绑定(bind)执行

eclipse - JFace 标签提供程序概述

java - 手动计算字符串 compareTo 字符串的输出

java - 读取和写入文件,但覆盖文件

java - 如何防止 Escape 键关闭 JFace 对话框

java - 如果使用相同的负载发出另一个请求,应使用哪种 RequestBody 类型?

Java gson 如何将 List<Item> 序列化为 JSON 字符串中的对象列表?