免责声明:

这是 .NET GUI 试图解决 JAVA 问题的典型案例。

问题描述:

我正在尝试使用 JFace 和 SWT 构建一个非常简单的 GUI - 代码很简单(有很多教程),但不那么简单的是我似乎无法让 JFace 和 SWT 在插件项目之外工作。

我希望能够在我的项目中毫无麻烦地使用 JFace 和 SWT,因为我将“C:/eclipse 3.5/plugins”放在我的 CLASSPATH 中(来自我的计算机 --> 属性 --> 高级 --> 环境变量)以及我可以在我的路径(当然包括本地用户路径和全局路径)中找到的所有 swt-*.dll 本文 在“安装 SWT 和 JFace”框中指示。

问题是我无法从 eclipse.org 导入任何内容,除非我直接引用 buildpath --> 库 --> 添加外部 jar 中的 jar(为了构建它,我必须添加以下 jar: org.eclipse.swt.win32.win32.x86_3.5.1.v3555a.jar, org.eclipse.jface_3.5.1.M20090826-0800.jar)。一旦我这样做了,它就构建得很好,但是当我将它作为“Java应用程序”运行时,我收到以下错误(我应该 运行方式 还有别的吗?):

Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/IProgressMonitor
    at demo.ui.test.EntryPoint.main(EntryPoint.java:18)
Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.IProgressMonitor
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    ... 1 more

我尝试调试这个,基本上它在尝试实例化时就会抛出 ApplicationWindow 类(org.eclipse.jface.window.ApplicationWindow)。尝试重现该错误,我注释掉了所有代码,并将其替换为 main 中的以下代码,并在第一行抛出与上面相同的错误:

ApplicationWindow w = new ApplicationWindow(null); //<-- error on this line
w.setBlockOnOpen(true);
w.open();
Display.getCurrent().dispose();

问题:

问题1:我怎样才能修复上面的错误(我想了解发生了什么)并让该死的东西运行?

问题2:为什么这些罐子对我的项目不可见以及如何制作它们?

由于我对 Java 和 Eclipse 不熟悉,我可能错过了一些非常琐碎的事情。非常感谢任何帮助!

编辑:似乎其他人也遇到了同样的问题 --> http://www.eclipsezone.com/eclipse/forums/t60528.html - 不太清楚他们是如何解决的,感谢帮助

有帮助吗?

解决方案

IProgressMonitor 您使用的这两个罐子中不提供接口。你还需要把 org.eclipse.equinox.common 类路径上的插件。 IProgressMonitor 无需运行整个eclipse环境即可使用。

(这是您参考的文章中的解决方案。我最初以为 IProgressMonitor 位于 org.eclipse.core.runtime 插件中,但它已移至 org.eclipse.equinox.common,如中所述 错误#122935)

其他提示

以上赞同彼得的时候,我总是要添加的JAR一堆把事情运行(特别是JFace的)。通常情况下,我需要

./org.eclipse.core.commands_3.3.0.I20070605-0010.jar
./org.eclipse.core.runtime_3.3.100.v20070530.jar
./org.eclipse.equinox.common_3.3.0.v20070426.jar
./org.eclipse.jface_3.3.1.M20070910-0800b.jar
./org.eclipse.osgi_3.3.2.R33x_v20080105.jar
./org.eclipse.ui.forms_3.3.0.v20070511.jar

您可以使用类似jarfinder,以帮助识别文件住在什么JAR文件的内容。在windows我似乎使用查找功能来查找,比如说,在文件系统上的eclipse文件夹下以zip / jar文件IProgressMonitor.class记住 - 因为有时候实际的JAR文件可能很难追查

我通常看到的失败,追查工作/添加JAR,冲洗和重复。

做RCP /插件看起来像Eclipse需要大量的适合你的问题的关心,做你自己独立的应用程序来处理这些额外的行李,但它真的很高兴有一个适当的独立本地找GUI如果你坚持它。所以我通常设置香草(非插件)的Eclipse项目,它迫使你面对这些问题(手动添加JAR文件到classpath)。它也派上用场,当你想发布您的项目。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top