【问题标题】:SWT FileDialog with java.lang.ClassNotFoundException带有 java.lang.ClassNotFoundException 的 SWT FileDialog
【发布时间】:2015-05-11 15:17:15
【问题描述】:

在我的 java 程序中,我试图创建一个 FileDialog 来保存文件。但是我收到了这个错误。

Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.widgets.FileDialog cannot be found by xxx.xxx.maintenance_1.0.0
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:423)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:336)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:328)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 24 more

这就是我创建对话框的方式:

    public DownloadLogFilesDialog(Shell parent, int style) {
        super(parent, style);
        shell = new Shell(getParent(), SWT.APPLICATION_MODAL);
        fileDialog = new FileDialog(shell, style); // error at this line
    }

    @SuppressWarnings("javadoc")
    public Object open() {
        shell.setSize(width, height);
        Rectangle parentBounds = getParent().getBounds();
        shell.setLocation(
            parentBounds.x + (parentBounds.width - width) / 2,
            parentBounds.y + (parentBounds.height - height) / 2);

        fileDialog.setText("Download Log Files"); //$NON-NLS-1$
        fileDialog.setFilterPath(System.getProperty("user.home")); //$NON-NLS-1$
        Object result = fileDialog.open();
        shell.dispose();
        return result;
    }

搜索了几天后,我仍然不知道这一点。有人可以帮忙吗?

编辑:

清单.MF

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: System
Bundle-SymbolicName: xxx.xxx.maintenance;singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: com.xxx.xxx.xxx.ui.maintenance.Activator
Bundle-Vendor: ClareControls
Require-Bundle: 
 org.eclipse.core.runtime;bundle-version="3.10.0",
 org.eclipse.rap.ui;resolution:=optional;visibility:=reexport,
 org.eclipse.rap.ui.forms;resolution:=optional;visibility:=reexport,
 xxx.xxx.common,
 xxx.xxx.db
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Import-Package: 
 com.xxx.xxx.xxx.db.entities;version="1.0.0",
 com.xxx.xxx.xxx.ui.common,
 com.xxx.xxx.xxx.ui.common.editors,
 com.xxx.xxx.xxx.ui.common.events,
 com.xxx.xxx.xxx.ui.components,
 com.xxx.xxx.xxx.ui.db,
 com.xxx.xxx.xxx.ui.projects,
 com.xxx.xxx.xxx.ui.projects.editors,
 com.xxx.xxx.xxx.ui.system.dialogs,
 com.xxx.xxx.xxx.ui.system.views,
 com.xxx.xxx.xxx.util,
 javax.persistence;version="[2.0.1,3.0.0)",
 org.apache.commons.io;version="2.0.0",
 org.json
X-Export-Package: com.xxx.xxx.xxx.ui.maintenance

xxx 只是一些其他捆绑包的名称,但我不能在这里显示。

【问题讨论】:

  • 这是什么Java程序?从堆栈跟踪来看,它可能是一个 Eclipse 插件——对吗?
  • @greg-449 是的,你是对的。我正在使用 RAP 和 OSGi。
  • 向我们展示插件 MANIFEST.MF 的内容

标签: java eclipse-plugin swt


【解决方案1】:

您需要将 org.eclipse.swt 添加到插件的 MANIFEST.MF 中的 Require-Bundle 列表中。

您可以在 plugin.xml 编辑器中的“必需插件”表中的“依赖项”选项卡上执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多