代码之家  ›  专栏  ›  技术社区  ›  JohnIdol

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

  •  4
  • JohnIdol  · 技术社区  · 16 年前

    免责声明 :

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

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

    我希望能够在我的项目中毫不费力地使用JFace和SWT,因为我将“C:/Eclipse3.5/插件”放在我的类路径中(从我的计算机-->属性-->高级-->环境变量)以及我可以在路径中找到的所有swt-*.dll(当然,包括本地用户路径和全局路径),如下所示 this article 在“安装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 作为 还有别的吗?):

    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

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

    问题:

    :我如何修复上面的错误(我想知道发生了什么)并让该死的东西运行?

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

    由于不熟悉Java和eclipse,我可能遗漏了一些非常琐碎的东西。非常感谢您的帮助!

    编辑 http://www.eclipsezone.com/eclipse/forums/t60528.html -虽然不太清楚他们是如何解决的,但我们很感激他们的帮助

    2 回复  |  直到 16 年前
        1
  •  11
  •   Peter Å tibraný    16 年前

    IProgressMonitor 接口在您使用的这两个JAR中不可用。你还需要把 org.eclipse.equinox.common 类路径上的插件。 可以在不运行整个eclipse环境的情况下使用。

    bug #122935

        2
  •  6
  •   Toby Daniel C. Sobral    12 年前

    与上面Peter的观点相呼应,我总是需要添加一堆罐子来运行(特别是对于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中,我似乎记得使用“查找”功能查找, IProgressMonitor.class

    我通常通过观察失败的地方、跟踪/添加罐子、冲洗和重复来工作。

    推荐文章