Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RMI服务器调用抛出java.lang.ClassNotFoundException:compute.compute_Java_Tomcat_Rmi - Fatal编程技术网

RMI服务器调用抛出java.lang.ClassNotFoundException:compute.compute

RMI服务器调用抛出java.lang.ClassNotFoundException:compute.compute,java,tomcat,rmi,Java,Tomcat,Rmi,我试图通过以下方法学习RMI 我已经为服务器端和客户端创建了类,类的详细信息如下: compute.Compute -- Remote interface compute.Task -- Normal interface engine.ComputeEngine -- Class that implements remote interface 代码详细信息可从以下链接的文档中查看: 我已经按照下面链接中给出的步骤编译了代码,我所做的一切都是在我有Ubuntu操作系统的机器上完成的 现在

我试图通过以下方法学习RMI

我已经为服务器端和客户端创建了类,类的详细信息如下:

compute.Compute -- Remote interface
compute.Task -- Normal interface
engine.ComputeEngine -- Class that implements remote interface
代码详细信息可从以下链接的文档中查看:

我已经按照下面链接中给出的步骤编译了代码,我所做的一切都是在我有Ubuntu操作系统的机器上完成的

现在,根据下面的链接,我已将客户端和服务器的策略文件放置在路径:
/home/user/public\u html

另一个区别是我有tomcat服务器,因此我将类文件放在tomcat webapps和我的web应用程序下,因此我使用以下命令运行该类:

java -cp /home/user/src:. -Djava.rmi.server.codebase=http://myipaddress:8080/myapp/classes/compute.jar -Djava.rmi.server.hostname=myipaddress -Djava.security.policy=server.policy engine.ComputeEngine
现在,当我运行此应用程序时,我得到的异常为:

ComputeEngine exception:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: compute.Compute
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:419)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
    at sun.rmi.transport.Transport$1.run(Transport.java:177)
    at sun.rmi.transport.Transport$1.run(Transport.java:174)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:275)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:252)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:378)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    at engine.ComputeEngine.main(ComputeEngine.java:31)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: compute.Compute
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:409)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
    at sun.rmi.transport.Transport$1.run(Transport.java:177)
    at sun.rmi.transport.Transport$1.run(Transport.java:174)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: compute.Compute
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.rmi.server.LoaderHandler$Loader.loadClass(LoaderHandler.java:1206)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:270)
    at sun.rmi.server.LoaderHandler.loadClassForName(LoaderHandler.java:1219)
    at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:729)
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:673)
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:610)
    at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:646)
    at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:311)
    at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:255)
    at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1558)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1e exce514)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
    ... 13 more
异常显示为
java.lang.ClassNotFoundException:compute.compute
。但是我在
compute.jar
中有一个类文件,它位于我的路径
/home/user/src
,我还可以使用
http://myipaddress:8080/myapp/classes/compute.jar

另外,我只在我的机器上执行所有步骤,没有任何单独的客户端和服务器机器

有人能帮我解决这个问题吗?请让我知道,如果你需要任何进一步的细节,以便我可以提供他们

更新:

我在这篇文章中遵循了@EJP给出的asnwer-

然后我从jar文件所在的目录启动
rmiregistry
,该jar文件具有
Compute.class
,然后运行以下命令:

java -cp /home/user/src:/home/user/public_html/classes/compute.jar -Djava.rmi.server.codebase=http://myipaddress:8080/myapp/classes/compute.jar -Djava.rmi.server.hostname=myipaddress -Djava.security.policy=server.policy engine.ComputeEngine

但我还是遇到了同样的异常。

该类不在注册表的类路径上。

根据文档,它在任何地方都没有提到。你能告诉我如何把它放在注册表类路径上吗?我在另一篇文章中按照了你的答案,但我得到了相同的错误,请查看我更新的文章以了解详细信息。为什么需要在任何地方提到它?注册表是一个Java程序,它在JVM中运行,它有一个类路径,它抛出
ClassNotFundExceptions
,就像任何其他Java代码一样。感谢您的回复,我对RMI概念不熟悉,所以可能我问的是一些琐碎的问题,对此表示抱歉。但我真的需要帮助来解决这个问题。根据这里的链接-,它说我必须从命令propmt启动
rmiregistry
。它还说,
您将运行rmiregistry,要么没有设置CLASSPATH环境变量,要么有一个CLASSPATH环境变量,该变量不包括您要下载到远程对象客户端的任何类的路径。
您能告诉我如何启动注册表来修复此问题吗?我的答案是重复的问题并没有说明在包含JAR文件的目录中启动注册表的任何内容。然而,它确实给出了我所知道的其他三个有效的解决方案。另见。