rmi找不到stub。
我刚开始学rmi,按照书上编了一个例子,这个例子刚开始运行好好的,在两台机子上都测试通过(没有采用动态类加载,直接把相关文件拷到客户机)。我也不知道改了什么地方,有一次运行突然就不行了,启动server时报错:Remote Error -----java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: RMILightBulbImp1_Stub
classpath=.;C:\j2sdk1.4.2_02\lib Path=C:\j2sdk1.4.2_02\bin;E:\oracle\ora92\bin;C:\Program Files\Oracle\jre\1.3.1\
bin;C:\Program Files\Oracle\jre\1.1.8\bin;C:\WINNT\system32;C:\WINNT;C:\WINNT\Sy
stem32\Wbem
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
源码:
服务接口:
public interface RMILightBulb extends java.rmi.Remote{
public void on() throws java.rmi.RemoteException;
public void off() throws java.rmi.RemoteException;
public boolean isOn() throws java.rmi.RemoteException;
}
服务实现
public class RMILightBulbImp1 extends java.rmi.server.UnicastRemoteObject implements RMILightBulb{
public RMILightBulbImp1() throws java.rmi.RemoteException{
setBulb(false);
}
private boolean lightOn;
public void on() throws java.rmi.RemoteException{
setBulb(true);
}
public void off() throws java.rmi.RemoteException{
setBulb(false);
}
public boolean isOn() throws java.rmi.RemoteException{
return getBulb();
}
public void setBulb(boolean value){
lightOn = value;
}
public boolean getBulb(){
return lightOn;
}
}
服务器端
import java.rmi.*;
import java.rmi.server.*;
public class LightBulbServer{
public static void main(String [] args){
System.out.println("Loading RMI service..........");
try{
RMILightBulbImp1 bulbService = new RMILightBulbImp1();
RemoteRef location = bulbService.getRef();
System.out.println(location.remoteToString());
String registry = "202.114.101.62";
if(args.length >= 1){
registry = args[0];
}
String registration = "rmi://" + registry + "/RMILightBulb";
Naming.rebind(registration,bulbService);
}
catch(RemoteException re){
System.err.println("Remote Error -----" + re);
}
catch(Exception e){
System.err.println("Error----" + e);
}
}
}
客户端
import java.rmi.*;
public class LightBulbClient{
public static void main(String[] args){
System.out.println("Looking for looght bulb service......");
try{
String registry = "202.114.101.62";
if(args.length >= 1){
registry = args[0];
}
String registration = "rmi://" + registry + "/RMILightBulb";
Remote remoteService = Naming.lookup(registration);
RMILightBulb bulbService = (RMILightBulb)remoteService;
System.out.println("Invoking bulbservice.on()......");
bulbService.on();
System.out.println("Bulb state: " + bulbService.isOn());
}
catch(NotBoundException nbe){
System.out.println("No light bulb service available in registry!!");
}
catch(RemoteException re){
System.err.println("Remote Error -----" + re);
}
catch(Exception e){
System.err.println("Error----" + e);
}
}
}
请高手指点!!