请高手帮我解决一个rmi程序的运行错误问题

fkj1225 2005-03-26 04:52:24
这是我在网上看到的:
http://search.csdn.net/Expert/topic/1664/1664099.xml?temp=.5024835

1、接口代码PerfectTimeI.java
package c15.rmi;
import java.rmi.*;
interface PerfectTimeI extends Remote
{
long getPerfectTime() throws RemoteException;
}

2、服务代码PerfectTime.java
package c15.rmi;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;
import java.net.*;

public class PerfectTime extends UnicastRemoteObject implements PerfectTimeI
{
public long getPerfectTime() throws RemoteException
{
return System.currentTimeMillis();
}
public PerfectTime() throws RemoteException
{
}
public static void main(String[] args) throws Exception
{
System.setSecurityManager( new RMISecurityManager());
PerfectTime pt=new PerfectTime();
Naming.bind("//localhost:2005/PerfectTime",pt);
System.out.println("Ready to do Time");
}
}

3、客户代码DisplayPerfectTime.java
package c15.rmi;
import java.rmi.*;
import java.rmi.registry.*;

public class DisplayPerfectTime
{
public static void main(String[] args) throws Exception
{
System.setSecurityManager( new RMISecurityManager());
PerfectTimeI t=(PerfectTimeI)Naming.lookup("//localhost:2005/PerfectTime");
for(int i=0;i<10;i++)
System.out.println("Perfect time= "+t.getPerfectTime());
}
}

4、编译
F:\java\rmi>javac -d server PerfectTimeI.java PerfectTime.java
F:\java\rmi>javac -d client PerfectTimeI.java DisplayPerfectTime.java
生成目录及文件:
├─client
│ └─c15
│ └─rmi
│ DisplayPerfectTime.class
│ PerfectTimeI.class
└─server
└─c15
└─rmi
PerfectTime.class
PerfectTimeI.class

5、生成rmi根
F:\java\rmi>cd server
F:\java\rmi\server>rmic c15.rmi.PerfectTime
又生成两个文件:
F:\JAVA\RMI\SERVER
└─c15
└─rmi
PerfectTime.class
PerfectTimeI.class
PerfectTime_Stub.class
PerfectTime_Skel.class
6、拷贝文件 PerfectTime_Stub.class、PerfectTime_Skel.class到client\c15\rmi目录
7、编辑策略文件policy:
grant {
// Allow everything for now
permission java.security.AllPermission;
};
保存在源文件所在目录中即F:\java\rmi\。
8、启动rmi注册服务器
F:\java\rmi>start rmiregistry 2005
9、启动服务类(为了验证rmi功能,最好屏蔽classpath环境变量,即set classpath=)
F:\java\rmi\server>java -Djava.rmi.server.codebase=file:///f:/java/rmi/server/
-Djava.security.policy=file:///f:/java/rmi/policy c15.rmi.PerfectTime

做到这里出错

这是错误报告:

Exception in thread "main" java.rmi.ServerException: Server RemoteException; nes
ted exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested excep
tion is:
java.lang.ClassNotFoundException: c15.rmi.PerfectTime_Stub
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknow
n Source)
at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at java.rmi.Naming.bind(Unknown Source)
at c15.rmi.PerfectTime.main(PerfectTime.java:20)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested ex
ception is:
java.lang.ClassNotFoundException: c15.rmi.PerfectTime_Stub
Caused by: java.lang.ClassNotFoundException: c15.rmi.PerfectTime_Stub

是什么问题?
...全文
259 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fkj1225 2005-03-27
  • 打赏
  • 举报
回复
请高手帮忙一下
fkj1225 2005-03-26
  • 打赏
  • 举报
回复
我是在classpath中包括了".;",有影响吗?
飞行的兔子 2005-03-26
  • 打赏
  • 举报
回复
我确实成功了,或者我们的classpath设置不一样吧!你是否在classpath中包括了".;"
如果按照我的步骤不行,你在docs文档中rmi这块找到附带的那个例子,按照它上面的步骤运行一下,看看有什么情况!
fkj1225 2005-03-26
  • 打赏
  • 举报
回复
那个我注意到了,我也改过,还是不行,都不知道为什么
我换台机器试一下
飞行的兔子 2005-03-26
  • 打赏
  • 举报
回复
我有个地方有错误,我在下面评论时修改过了,你看看下面的评论,我的结果成功了!
fkj1225 2005-03-26
  • 打赏
  • 举报
回复
我运行了楼上的那个rmi程序
做到第五步就出同样的异常:

Exception in thread "main" java.rmi.ServerException: Server RemoteException; nes
ted exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested excep
tion is:
java.lang.ClassNotFoundException: net.xiaobo.remoteserver.HelloRemoteImp
_Stub
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknow
n Source)
at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at java.rmi.Naming.bind(Unknown Source)
at net.xiaobo.remoteserver.HelloRemoteImp.main(HelloRemoteImp.java:18)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested ex
ception is:
java.lang.ClassNotFoundException: net.xiaobo.remoteserver.HelloRemoteImp
_Stub
Caused by: java.lang.ClassNotFoundException: net.xiaobo.remoteserver.HelloRemote
Imp_Stub
飞行的兔子 2005-03-26
  • 打赏
  • 举报
回复
如果这个不行的话,你看看jdk docs下rmi介绍的那个例子,或者到blog.csdn.net/zhutouzip看看我写的一个rmi!
fkj1225 2005-03-26
  • 打赏
  • 举报
回复
G:\Bean\RmiTest>rmic c15.rmi.PerfectTime

这一步已经自动把生成的两个class放在c15\rmi下
还是不行
飞行的兔子 2005-03-26
  • 打赏
  • 举报
回复
G:\Bean\RmiTest>rmic c15.rmi.PerfectTime
这一步生成的两个class也应该放到c15\rmi下;
fkj1225 2005-03-26
  • 打赏
  • 举报
回复
我按楼上的建议去做

G:\Bean\RmiTest>javac -d . PerfectTimeI.java PerfectTime.java DisplayPerfectTime
.java

G:\Bean\RmiTest>rmic c15.rmi.PerfectTime

G:\Bean\RmiTest>start rmiregistry 2005

G:\Bean\RmiTest>java -Djava.rmi.server.codebase=file:///g:/bean/rmitest/ -Djava.
security.policy=file:///g:/bean/rmitest/policy c15.rmi.PerfectTime

还是出错
Exception in thread "main" java.rmi.ServerException: Server RemoteException; nes
ted exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested excep
tion is:
java.lang.ClassNotFoundException: c15.rmi.PerfectTime_Stub
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknow
n Source)
at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at java.rmi.Naming.bind(Unknown Source)
at c15.rmi.PerfectTime.main(PerfectTime.java:20)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested ex
ception is:
java.lang.ClassNotFoundException: c15.rmi.PerfectTime_Stub
Caused by: java.lang.ClassNotFoundException: c15.rmi.PerfectTime_Stub
飞行的兔子 2005-03-26
  • 打赏
  • 举报
回复
├─client
│ └─c15
│ └─rmi
│ DisplayPerfectTime.class
│ PerfectTimeI.class
└─server
└─c15
└─rmi
PerfectTime.class
PerfectTimeI.class
这样的目录结构有问题,你将c15.rmi分成了在两个不同文件中的两个目录当然有问题,
(!)你可以在源文件中用命令 javac -d . *.java生成对应package的文件,package和文件结构要对应
(2)在当前目录中建立一个c15\rmi的目录,将编译生成后的class文件拷贝进去.
fkj1225 2005-03-26
  • 打赏
  • 举报
回复
请问在哪里缺少了c15.rmi包?
umbrella1984 2005-03-26
  • 打赏
  • 举报
回复
缺少
c15.rmi包

67,516

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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