我写了个java程序,在eclipse里面点运行的时候就没有问题,一切正常,数据也正常.
但是我在命令行里面用javac执行正常,然后java执行的时候就出错了.
Exception in thread "main" java.lang.NoClassDefFoundError: d:\java\Server4
Caused by: java.lang.ClassNotFoundException: d:\java\Server4
        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)这是为啥哪?
我在linux下运行也是这样的错误.

解决方案 »

  1.   

    类没找到,贴一下你的程序和执行的java命令
      

  2.   

    import java.net.*;
    //import java.io.*;
    import java.util.*;
    import java.io.PrintWriter;
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    public class Server4 {
            private ServerSocket server;
            private BManager bMan=new BManager();
            
            public Server4(){}
            void startServer()
            {
             String xml = "<cross-domain-policy>";
                xml = xml + "<allow-access-from domain=\"*\" to-ports=\"*\" />";
                xml = xml + "</cross-domain-policy>";
                    try{
                    
                            server=new ServerSocket(8888);
                            //protocol.sendStringToSingleClient(protocol.getUser(), "<?xml version=\"1.0\"?><cross-domain-policy><site-control permitted-cross-domain-policies=\"all\"/><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>\0");
                            //System.out.println("服务器套接字建立完毕");
                            
                            while(true)
                            {
                                    Socket socket=server.accept();
                                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                                    PrintWriter pw = new PrintWriter(socket.getOutputStream());
                                    char[] by = new char[22];
                                    br.read(by,0,22);
                                    String head = new String(by);
                                    if(head.equals("<policy-file-request/>"))
                                    {
                                            pw.print(xml + "\0");
                                            pw.flush();
                                    }
                                    new Chat_Thread(socket).start();
                                    bMan.add(socket);
                                    bMan.sendClientInfo();
                            }
                    }catch(Exception e){
                            //System.out.println(e);
                    }
            }
            public static void main(String[] args) {
                    Server4 server=new Server4();
                    server.startServer();
            }
            class Chat_Thread extends Thread 
            {
                    Socket socket; 
                    private BufferedReader reader;
                    private PrintWriter writer;
                    Chat_Thread(Socket socket)
                    {
                            this.socket=socket;
                    }
                    public void run()
                    {
                            
                            try
                            {
                                    reader=new BufferedReader(new InputStreamReader(socket.getInputStream(),"utf8"));
                                    writer=new PrintWriter(socket.getOutputStream(),true);
                                    String msg;
                                    while((msg=reader.readLine())!=null)
                                    {
                                            bMan.sendToAll(msg);
                                    }
                            }catch(Exception e)
                            {
                                    
                            }finally
                            {
                                    try {
                                            bMan.remove(socket);
                                            if(reader !=null) reader.close();
                                            if(writer !=null) writer.close();
                                            if(socket !=null) socket.close();
                                            reader=null;
                                            writer=null;
                                            socket=null;
                                            bMan.sendClientInfo();
                                    } catch (Exception e) {}
                            }
                            
                    }
            }
    }class BManager extends Vector
    {
            BManager (){}
            void add(Socket sock)
            {
                    super.add(sock);
            }
            void remove(Socket sock)
            {
                    super.remove(sock);
            }
            synchronized void sendToAll(String msg)
            {
                    PrintWriter writer=null;
                    Socket sock;
                    for(int i=0;i<size();i++)
                    {
                            sock=(Socket)elementAt(i);
                            try
                            {
                                    writer=new PrintWriter(sock.getOutputStream(),true);
                            }catch(Exception ie){}
                            if(writer!=null) writer.println(msg);
                    }
            }        synchronized void sendClientInfo()
            {
            }
    }
      

  3.   

    这是我在linux下执行的报错
    [root@localhost ~]# java /root/Server4
    Exception in thread "main" java.lang.NoClassDefFoundError: .root.Server4
       at gnu.java.lang.MainThread.run(libgcj.so.7rh)
    Caused by: java.lang.ClassNotFoundException: .root.Server4 not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:./,file:/usr/java/jdk1.6.0_07/lib/dt.jar,file:/usr/java/jdk1.6.0_07/lib/tools.jar], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
       at java.net.URLClassLoader.findClass(libgcj.so.7rh)
       at gnu.gcj.runtime.SystemClassLoader.findClass(libgcj.so.7rh)
       at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
       at java.lang.ClassLoader.loadClass(libgcj.so.7rh)
      

  4.   

    问题是file:/usr/java/jdk1.6.0_07/lib/dt.jar,file:/usr/java/jdk1.6.0_07/lib/tools.jar 这两个的路径是没有错的啊
      

  5.   

    找到你的class文件,在该目录下用javac
      

  6.   

    我将你的程序编译运行没有问题
    C:\>javac Server4.java
    注意:Server4.java 使用了未经检查或不安全的操作。
    注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。C:\>java Server4
    server.startServer() runing为了能看出执行结果,我修改了一下main方法.
     public static void main(String[] args) { 
                    Server4 server=new Server4(); 
                    System.out.println("server.startServer() runing");
                    server.startServer(); 
            } 
    需要配jdk地址,在环境变量Path中加入C:\Program Files\Java\jdk1.6.0_10\bin;
    或者C:\Program Files\Java\jdk1.5.0\bin
    我用了两个版本的 jdk都可以执行.
    我这里没有linux环境,无法在linux环境测试。
    根据上面的原因,我怀疑是你linux环境jdk环境配置的问题。