没有找到stub,首先确定启动rmiregistry不包括任何类路径,让后建议把stub,skel的文件放在可以让客户端方便访问的地方,强烈推荐http目录内,启动server端一定要保证需要的接口,和实现接口的远程对象的类放在classpath内,再加上正确的java.rmi.server.codebase参数,和policy文件就可正常启动服务端了...

解决方案 »

  1.   

    老兄,我不懂.
    我是照着<核心技术卷2>的例子做的,它说这样就可以.而且运行它的源代码也是出这个错误.还有什么HTTP目录我真的不懂
      

  2.   

    http目录就是你的web服务的文件的目录,你第一次启动web服务的时候会设置这个路径的(或者是系统缺省路径).
      

  3.   

    你要用win32的话,就是一个iis里面的目录就可以..
      

  4.   

    对不起,我还是不明白。我是在我自己的机器上运行的,书上说只要运行几条命令就可以了,根本就没提到什么web服务。而且我已经把他们放到classpath里了,可还是不行。
      

  5.   

    以前给别人写了这个step by step, 现在已经用过很多次了,
    你看看吧例子是Core Java V2 C5的例子
    我主要使用http的80端口方式传输,其他方法,如ftp,classfileserver暂时没时间说了
     
    1。 首先,保证你正在打开http服务,如果你是在用windows2000, 
    先到添加安装程序里添加windows组件,安装IIS,然后点击资源管理器
    里的管理工具,点击service,保证IIS Admin Service已经打开了,
    这是你就可以设定你的http服务了,点击资源管理器里的管理工具,
    点击Internet Service Manager,右键单击默认http服务,点击属性,
    你会看到一些相关信息,比如端口号 80等,home directory那页,
    保证read复选框被选定,最好把Directory Browsing也打开(调试方便)。
    这些都做完了,你在C:\Inetpub\wwwroot里建一个目录download,把Product.class,ProductImpl_Stub.class
    拷进去,这时你可以测试一下,http服务是否可以下载你的stub, 
    你打开一个IE浏览器,输入http://localhost:80/download, 
    (如果刚才你没改80,那么http://localhost/download这样也可以)
    这时,如果刚才你打开了Directory Browsing,你就可以看到类似这样的东西
    localhost - /download/
    ------------[To Parent Directory] 
    Saturday, September 14, 2002  9:08 PM          219 Product.class 
    Saturday, September 14, 2002  9:09 PM         2876 ProductImpl_Stub.class----------- 
    点击ProductImpl_Stub.class,会谈出一个对话框让你下载,http80这就搞定了!这表示你的web服务可以让你写的rmi程序的客户端下载stub了。
     
     
    2。 把服务端需要的类放到一个server目录里,这个目录不用放到wwwroot里,放到你任何的地方,比如d:\server,
    以Core Java的第5章为例,你要放入这些文件:
    Product.class
    ProductServer.class
    ProductImpl.class
    ProductImpl_Stub.class
     
    3。 随便找个地方建一个client目录,如d:\client,把客户端程序放进去
    Product.class
    ProdcutClient.class
    client.policy
     
    其中client.policy要保证允许客户端访问http服务,默认情况下,http用80断口,所以,你的client.policy一般可以这样写
    grant 
    {  permission java.net.SocketPermission 
          "*:1024-65535", "connect,accept";
       permission java.net.SocketPermission 
          "*:80", "connect,accept";
    };4。 然后开一个dos窗口,键入set classpath=回车,这时你的CLASSPATH被清空,防止混乱
    例如
    C:\>set classpath=
     
    C:\>set classpath
    Environment variable classpath not defined
     
    C:\>rmiregistry
     
    5。 然后再server目录里启动服务端:
     
    E:\Server>java -Djava.rmi.server.codebase=http://localhost/download/ ProductServerConstructing server implementations...
    Binding server implementations to registry...
    Waiting for invocations from clients...
     
    6。 然后再client目录里启动客户端
     
    E:\Client>java -Djava.security.policy=client.policy ProductClientI am a Blackwell Toaster. Buy me!
    I am a ZapXpress Microwave Oven. Buy me!结束