java.lang.NoClassDefFoundError

java.lang.NoClassDefFoundError,java,rmi,noclassdeffounderror,Java,Rmi,Noclassdeffounderror,我不知道为什么会出现运行时错误,我用谷歌搜索了这个问题,它说编译时可用的类在运行时不再可用 代码如下: package examples.RMIShape; import java.rmi.*; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; //import java.rmi.server.UnicastRemoteObject; public class ShapeListServer

我不知道为什么会出现运行时错误,我用谷歌搜索了这个问题,它说编译时可用的类在运行时不再可用

代码如下:

package examples.RMIShape;
import java.rmi.*;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
//import java.rmi.server.UnicastRemoteObject;

public class ShapeListServer {
    public static void main(String args[]){
//      System.setSecurityManager(new RMISecurityManager());
        System.out.println("Main OK");
        try{
            ShapeList aShapelist = new ShapeListServant();
            System.out.println("After create");
            String registryURL = "rmi://localhost:" + "/ShapeList";
            startRegistry();
            Naming.rebind(registryURL, aShapelist);
            System.out.println("ShapeList server ready");
        }catch(Exception e) {
            System.out.println("ShapeList server main " + e.getMessage());
        }
    }

    // This method starts a RMI registry on the local host, if it
    // does not already exists at the specified port number.
    private static void startRegistry()throws RemoteException{
        Registry registry;
        try {
            registry = LocateRegistry.getRegistry();
            registry.list( );  // This call will throw an exception
            // if the registry does not already exist
        }
        catch (RemoteException e) {
            // No valid registry at that port.
            System.out.println ("RMI registry cannot be located at port " + Registry.REGISTRY_PORT );
            registry = LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
            System.out.println("RMI registry created at port " + Registry.REGISTRY_PORT);
        }
    } // end startRegistry
}

Basicall java.lang.NoClassDefFoundError如果java虚拟机或ClassLoader实例尝试加载类的定义(作为普通方法调用的一部分或使用新表达式创建新实例的一部分),但找不到该类的定义,则会引发此错误

以下链接将很有帮助。此链接将指导您解决此问题

希望这会有帮助

我用谷歌搜索了这个问题,它说编译时可用的类在运行时不再可用


那是不对的。这将导致ClassNotFoundException。这有几个原因,但最常见的一个原因是文件中的类不是文件名和目录层次结构所暗示的类。

谷歌说得对,只要找到这些问题的答案,你就会很好。对于哪个类,您将获得此错误?该类存在于哪个jar中?最后,这个jar在您的类路径中吗?请发布完整的错误消息,包括堆栈跟踪;它还告诉您缺少什么类。运行程序时,您必须确保类位于类路径中。我不想与您争论,但我在那里写的任何东西都来自oracle java doc,您说“我用谷歌搜索了这个问题,它说编译时可用的类在运行时不再可用。”如果您转到link:您会的“Java中NoClassDefFoundError的原因是什么?”他们清楚地说,“Java中的NoClassDefFoundError出现在Java虚拟机无法在运行时找到编译时可用的特定类时“请看一看。谢谢你的评论,我什么都没说。这是一段引用自OP的话。我知道Javadoc说了什么,但这是不正确的。