rmi java。lang.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 {
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
}
# 1 楼答案
我们称之为java。如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为普通方法调用的一部分或使用新表达式创建新实例的一部分),但找不到该类的定义,则会引发lang.NoClassDefFoundError
以下链接将很有帮助。此链接将指导您解决此问题
http://javarevisited.blogspot.in/2011/06/noclassdeffounderror-exception-in.html
http://javaeesupportpatterns.blogspot.in/2012/06/javalangnoclassdeffounderror-how-to.html
希望这会有帮助
# 2 楼答案
那是不对的。这将导致ClassNotFoundException。这有几个原因,但最常见的原因是文件中的类不是文件名和目录层次结构所暗示的类