【发布时间】:2016-06-15 08:52:28
【问题描述】:
我用 RMI 在 netbeans 中编写了一个程序,客户端出错
错误:
java.rmi.UnmarshalException:解组返回错误;嵌套的 例外是:java.lang.ClassNotFoundException: rmiserver.Message (没有安全管理器:RMI 类加载器已禁用)在 sun.rmi.registry.RegistryImpl_Stub.lookup(未知来源)
但是服务器没有任何错误!
界面代码:
package rmiclient;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Message extends Remote {
void sayHello(String name) throws RemoteException;
}
接口实现是:
package rmiserver;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class MessageImpl extends UnicastRemoteObject implements Message {
public MessageImpl() throws RemoteException {
}
@Override
public void sayHello(String name) throws RemoteException {
System.out.println("hello "+name);
}
}
服务器代码是:
package rmiserver;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Main {
private void startServer(){
try {
// create on port 1099
Registry registry = LocateRegistry.createRegistry(1099);
// create a new service named myMessage
registry.rebind("myMessage", new MessageImpl());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("system is ready");
}
public static void main(String[] args) {
Main main = new Main();
main.startServer();
}
}
客户端代码是:
package rmiclient;
import java.rmi.RMISecurityManager;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Main {
private void doTest(){
try {
// fire to localhost port 1099
Registry myRegistry = LocateRegistry.getRegistry("127.0.0.1", 1099);
// search for myMessage service
Message impl = (Message) myRegistry.lookup("myMessage");
// call server's method
impl.sayHello("edwin");
System.out.println("Message Sent");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Main main = new Main();
main.doTest();
}
}
谢谢:)。
【问题讨论】:
-
而且代码无法编译。
-
我的代码编译好了!构建成功(总时间:0 秒)。但不会运行
-
这个代码没有。你在包
rmiclient中有Message,在包rmiserver中有实现它的服务器,并且没有import rmiclient.*语句;
标签: java rmi classnotfoundexception