一个rmi的入门问题,帮忙看一下

panwxiong 2003-11-05 10:45:20
我写了一个rmi的程序,如下(jbuilder 9)
//remote.java
package rmi01;
import java.rmi.*;
public interface remote extends java.rmi.Remote{
public String method()throws java.rmi.RemoteException;
}

//app1.java
package rmi01;
import java.rmi.*;
import java.rmi.server.*;

public class app1 extends java.rmi.server.UnicastRemoteObject implements remote{
public app1() throws java.rmi.RemoteException{
super();
}
public String method() throws RemoteException{
return "This is remote method";
}
public void localMethod() throws java.rmi.RemoteException{}

}
//Server.java
package rmi01;
import java.rmi.*;
import java.rmi.server.*;
public class Server {
public static void main(String args[]){
try{
app1 app = new app1();
Naming.rebind("rmi://127.0.0.1:8080/Server",app);
System.out.println("Server created and bound in the registry to rmi");
}
catch(Exception e){
System.out.println("Exception error");
e.printStackTrace();
}
}
}
编译通过,在cmd下运行rmiregistry 8080后运行Server,提示
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: rmi01.app1_Stub

at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:352)

at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:207)

Exception error

at sun.rmi.transport.Transport$1.run(Transport.java:148)

at java.security.AccessController.doPrivileged(Native Method)

at sun.rmi.transport.Transport.serviceCall(Transport.java:144)

at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)

at java.lang.Thread.run(Thread.java:536)

at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)

at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)

at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:350)

at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)

at java.rmi.Naming.rebind(Naming.java:160)

at rmi01.Server.main(Server.java:18)

Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: rmi01.app1_Stub

at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)

at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:342)

at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:207)

at sun.rmi.transport.Transport$1.run(Transport.java:148)

at java.security.AccessController.doPrivileged(Native Method)

at sun.rmi.transport.Transport.serviceCall(Transport.java:144)

at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)

at java.lang.Thread.run(Thread.java:536)

Caused by: java.lang.ClassNotFoundException: rmi01.app1_Stub

at java.net.URLClassLoader$1.run(URLClassLoader.java:198)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:186)

at java.lang.ClassLoader.loadClass(ClassLoader.java:306)

at java.lang.ClassLoader.loadClass(ClassLoader.java:262)

at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:207)

at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:427)

at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:161)

at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:629)

at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:257)

at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:200)

at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1503)

at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1425)

at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1616)

at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1264)

at java.io.ObjectInputStream.readObject(ObjectInputStream.java:322)

... 9 more
不知道为什么?请高手看一下,不胜感谢
...全文
35 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerrygui 2004-02-26
  • 打赏
  • 举报
回复
哥哥,我有同样的问题,panwxiong(panwxiong),请教你是如何解决的!!!

万份感谢!
langraser 2003-12-30
  • 打赏
  • 举报
回复
我顶
stars_of_leo 2003-11-07
  • 打赏
  • 举报
回复
gx :)
panwxiong 2003-11-06
  • 打赏
  • 举报
回复
问题已经解决,我把环境变量中的classpath删除后运行正常,原来的classpath中有个winrunner的值。再请教mietain,如何在project中添加执行参数?
panwxiong 2003-11-06
  • 打赏
  • 举报
回复
问题已经解决,我把环境变量中的classpath删除后运行正常,原来的classpath中有个winrunner的值。再请教mietain,如何在project中添加执行参数?
mietian 2003-11-05
  • 打赏
  • 举报
回复
在jb中不用经过专门的rmic编译,但你的server类必须在属性中选择一个rmi有关的选项!java2版本只生成stub文件!然后在project属性中添加执行参数,跟那个权限问题有关的,跟.pority文件有关的!这样应该就没问题了!祝好运!
stars_of_leo 2003-11-05
  • 打赏
  • 举报
回复
你的实现RMI接口的类app1在编译过后,有经过rmic再编译过吗?
要将经rmic编译生成的两个.class文件放在rmi01目录下。

good luck :)

62,629

社区成员

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

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