我有一个可用的RMI服务器程序,我可以直接从.class文件编译和执行。
但是,当我尝试为每个程序创建一个JAR文件时,我得到一个ClassNotFoundException: ChatImpl_Stub
导致RemoteException
执行。
我的清单是(最后加一个空行):
Main-Class: Server
Class-Path: chat-RMI-common.jar
其中chat-RMI-common是包含客户端聊天界面的JAR文件。
我用:
成功创建了JARjar cvmf ..\MANIFEST.MF chat-RMI-server.jar *.class
服务器JAR确实包含ChatImpl_Stub。但是,当我尝试启动JAR文件时会出现异常:
java -Djava.rmi.server.codebase="file:chat-RMI-common.jar file:chat-RMI-server.jar"
-Djava.security.policy=..\security.policy
-jar chat-RMI-server.jar
当调用涉及ChatImpl的Naming.rebind
函数时(在程序开头),会出现异常。
我的安全政策:
grant {
permission java.security.AllPermission;
}
我还记得什么?提前感谢您的时间。
答案 0 :(得分:1)
仔细查看堆栈跟踪。注册表找不到该课程。它需要在Registry的CLASSPATH上。因此,您需要在其CLASSPATH上使用正确的JAR启动Registry,或者更好地使用LocateRegistry.createRegistry()在服务器JVM中启动它。