自已编译一个SWT的应用,可是调用不了,命令行下报错如下,请各位大侠帮忙看看怎么回事?D:\zmrj>java -jar zmrj.jar -Djava.library.apth=.;.\lib form.MainWindowException in thread "main"java.lang.NoClassDefFoundError: 
org/eclipse/jface/viewers/ISelectionChangedListener
Caused by: java.lang.ClassNotFoundException: org.eclipse.jface.viewers.ISelectio
nChangedListener

        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)D:\zmrj>

解决方案 »

  1.   

    是不是没有把 swt的jar包放到 classpath去啊??
      

  2.   

    不好意思,前面贴错了一个字符,重贴一遍:D:\zmrj>java -jar zmrj.jar -Djava.library.path=.;.\lib form.MainWindow
    Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jface/vie
    wers/ISelectionChangedListener
    Caused by: java.lang.ClassNotFoundException: org.eclipse.jface.viewers.ISelectio
    nChangedListener
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClassInternal(Unknown Source)D:\zmrj>回复:qsrock
        我已经把Eclipse 自带的包:org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar 放到.\lib 中了,
    另外的四个SWT的dll也放到D:\zmrj 目录中。我看过好多贴都是找不到main方法,可这里却是找不到:org.eclipse.jface.viewers.ISelectio
    nChangedListener,奇怪!
      

  3.   

    不好意思,前面贴错了一个字符,重贴一遍:D:\zmrj>java -jar zmrj.jar -Djava.library.path=.;.\lib form.MainWindow
    Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jface/vie
    wers/ISelectionChangedListener
    Caused by: java.lang.ClassNotFoundException: org.eclipse.jface.viewers.ISelectio
    nChangedListener
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClassInternal(Unknown Source)D:\zmrj>回复:qsrock
        我已经把Eclipse 自带的包:org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar 放到.\lib 中了,
    另外的四个SWT的dll也放到D:\zmrj 目录中。我看过好多贴都是找不到main方法,可这里却是找不到:org.eclipse.jface.viewers.ISelectio
    nChangedListener,奇怪!
      

  4.   


    你需要将包含org/eclipse/jface/viewers/ISelectionChangedListener 类的jar包放在classpath中,如:
    java -cp .;org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar -jar zmrj.jar -Djava.library.path=.;.\lib form.MainWindow 
      

  5.   


    楼上大哥的方法刚试过(是这个包:org.eclipse.jface_3.2.2.M20061214-1200.jar, 也放到.\lib 中了),还是不行,报同样的错...
      

  6.   


    只放在.\lib 中是没有用的,你必须用-cp在这个参数中指定其路径。-Djava.library.path参数不是指定的classpath,而是一些本地代码。
      

  7.   

    D:\zmrj>java -cp .;.\lib;org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar -jar zm
    rj.jar -Djava.library.path=.;.\lib form.MainWindow
    Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jface/vie
    wers/ISelectionChangedListener
    Caused by: java.lang.ClassNotFoundException: org.eclipse.jface.viewers.ISelectio
    nChangedListener
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClassInternal(Unknown Source)D:\zmrj>上面的命令行,这样写对么?我真的不明白,为什么在Eclipse中就可以运行,发布出来后就这样...晕
      

  8.   

    org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar文件在当前目录就可以了,但是前提是org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar中org/eclipse/jface/viewers/ISelectionChangedListener 如果org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar在.\lib中,你可以这样运行:
    D:\zmrj>java -cp .;.\lib\org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar -jar zmrj.jar -Djava.library.path=.;.\lib form.MainWindow 在eclispe中,这个jar文件已经在classpath中了
      

  9.   

    好象搞错了,错误信息中是这样写的:Caused by: java.lang.ClassNotFoundException: org.eclipse.jface.viewers.ISelectio 
    nChangedListener 
    按大哥的意思,我先试过,还是那样报错,我这里也把含org.eclipse.jface.viewers.ISelectio 
    nChangedListener这个类的包也写上,结果也一样:
    D:\zmrj>java -cp .;.\lib\org.eclipse.jface_3.2.2.M20061214-1200.jar -jar zmrj.ja
    r -Djava.library.path=.;.\lib form.MainWindow
    Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/jface/vie
    wers/ISelectionChangedListener
    Caused by: java.lang.ClassNotFoundException: org.eclipse.jface.viewers.ISelectio
    nChangedListener
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClassInternal(Unknown Source)D:\zmrj>可怜啊,给java折磨得两眼通红,也麻烦大哥了
      

  10.   

    D:\java\MyEclipseKeyGen>java MyEclipseKeyGen
    Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/graph
    ics/Device
    Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.graphics.Device
            at java.net.URLClassLoader$1.run(URLClassLoader.java:220)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:209)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:208)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:325)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:270)
            at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:338)
    Error: Could not find the main class.
    Error: A JNI error has occurred, please check your installation and try again这个错误也困扰好长时间了,一直解决不了
      

  11.   

    我也遇见了同样的问题,在可执行Jar包中引用了另外的Jar,用Eclipse是好的,但是用cmd执行的时候也是报
    ClassNotFound
      

  12.   

    我遇到和你类似的问题,我用cmd来运行java 的窗体程序,报错为Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/graphics/Drawable,
    这包在哪里,找不到啊
      

  13.   

    你试一下把classpath变量最前面加(.;)试一下,我的刚才也是能编译不能运行出现异常Exception in thread "main" java.lang.NoClassDefFoundError: hello,设置后就成功了。
      

  14.   

    我也遇到这样的情况了,其实都不是这些原因,应该是classpath的设置问题,要在classpath中设置两个东西:
    1   .;%JAVA_HOME%\lib\dt.jar;
    2  这个才是问题的关键所在:   %JAVA_HOME%\lib\tools.jar如果忘记设置的话就会这样,我是在添加了这项之后问题就解决的
      

  15.   

    是这样的首先要设好环境变量,如果这些没有问题,就是执行时没有区分大小写,如 程序是public class HelloWorld{
    public static void main(String[] args)
    {
    System.out.println("         ====欢迎来到java世界====" );
      } 
    }用javac编译后,用java 调用时要严格按大小写来调用如:java HelloWorld如果你用的是:java helloworld就会出错。
    另外,不能这样加扩展名:java HelloWorld.class