rmi找不到stub。

benny_2001_80 2005-07-21 08:03:51
我刚开始学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);
}
}
}
请高手指点!!
...全文
145 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
junnef 2005-11-16
  • 打赏
  • 举报
回复
你要把它设知道类的路径里,如果cmd也在包所在的目录运行,classpath中至少要有一个.;
brushington 2005-10-31
  • 打赏
  • 举报
回复
我也遇到这个问题了,郁闷中
benny_2001_80 2005-07-21
  • 打赏
  • 举报
回复
忘了一点,为了省事,我把所有的源文件和编译的.class文件放在一个目录下面,应该没问题吧。rmic后的stub和skelton也是在这个目录。关键是以前怎么测试没问题,突然就不行了?出问题是在本地机上运行cmd,用java LightBulbServer命令就报了上面所说的错误

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧