繁体   English   中英

不创建插件就不能在eclipse中使用JFace和SWT

[英]Can't use JFace and SWT in eclipse without creating plugin

免责声明

这是.NET GUI尝试围绕JAVA工作的经典案例。

问题描述:

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

我希望能够在我的项目中使用JFace和SWT没有麻烦,因为我把“C:/ eclipse 3.5 / plugins”放在我的CLASSPATH中(从我的计算机 - >属性 - >高级 - >环境变量)以及我在PATH中找到的所有swt - * .dll(可以确定本地用户和全局PATH),如本文在“安装SWT和JFace”框中所示。

问题是我无法从eclipse.org导入任何东西,除非我直接引用buildpath中的jar - > libraries - >添加外部jar(为了构建它我必须添加以下jar: org.eclipse.swt .win32.win32.x86_3.5.1.v3555a.jarorg.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 - 不太清楚他们如何解决它虽然,援助赞赏

您使用的两个jar中没有IProgressMonitor接口。 您还需要在类路径中放置org.eclipse.equinox.common插件。 IProgressMonitor可以在没有整个eclipse环境运行的情况下使用。

(这是你引用的文章的解决方案。我原本以为IProgressMonitor在org.eclipse.core.runtime插件中,但它已被移动到org.eclipse.equinox.common,如bug#122935中所述

回应Peter的观点,我总是需要添加一堆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中我似乎记得使用find功能来查找文件系统上eclipse文件夹下的zip / jar文件中的IProgressMonitor.class - 有时实际的JAR很难被追踪。

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

做RCP /插件似乎Eclipse为你解决了很多问题,做你自己的独立应用程序带来了这个额外的包袱,但如果你坚持使用它有一个适当的独立本机GUI非常好。 所以我通常设置vanilla(非插件)eclipse项目,它会迫使你面对这些问题(手动将JAR添加到类路径中)。 当您想要分发项目时,它也会派上用场。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM