Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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
Java 设置简单RMI服务器时出现问题_Java_Rmi - Fatal编程技术网

Java 设置简单RMI服务器时出现问题

Java 设置简单RMI服务器时出现问题,java,rmi,Java,Rmi,我在设置一个简单的RMI服务器时遇到了问题,我想知道是否有人能为我指明正确的方向 我有一个简单的类,Server,它应该导出一个简单的接口。当前,当我尝试运行server类时,出现以下异常: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nes

我在设置一个简单的RMI服务器时遇到了问题,我想知道是否有人能为我指明正确的方向

我有一个简单的类,Server,它应该导出一个简单的接口。当前,当我尝试运行server类时,出现以下异常:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: prototype.ISimpleService
通过运行“start rmiregistry”命令,我已经确保rmi注册表正在运行,并且我正在使用以下参数运行服务

-Djava.rmi.server.codebase=file:C:/Users/John/Documents/NetBeansProjects/Prototype/build/classes
上述参数中的路径指向我的类层次结构的顶层文件夹,因此:

/班级

/原型

->ISimpleService.class

->SimpleServiceImpl.class

->伊瑟弗级

这是我的服务器代码:

public class Server
{
    private static ISimpleService service;

    public static void main(String[] args)
    {
        service = new SimpleServiceImpl();

        try
        {
            ISimpleService stub = (ISimpleService) UnicastRemoteObject.exportObject(service, 0);

            Registry registry = LocateRegistry.getRegistry();

            registry.rebind("SimpleService", stub);

            System.out.println("Simple Service bound");
        } 
        catch (Exception ex)
        {
            System.out.println("Exception binding the simple service");
            ex.printStackTrace();
        }
    }
}
我已经研究了Java RMI跟踪,并对我的简单示例进行了调整,以遵循这一点,尽管我没有使用我不应该使用的安全性/权限,因为我以前有一个RMI示例在没有这些东西的情况下工作过

所以我相信我必须错过一些简单的东西(没有双关语的意思),使这项工作,但我现在看不到任何东西

有人有什么想法吗

以下是完整的堆栈跟踪:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: prototype.ISimpleService
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask    (ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer    (StreamRemoteCall.java:255)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    at prototype.Server.main(Server.java:35)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: prototype.ISimpleService
    at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
    at sun.rmi.transport.Transport$1.run(Transport.java:159)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask    (ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassNotFoundException: prototype.ISimpleService
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:247)
    at sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:711)
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:655)
    at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:592)
    at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628)
    at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294)
    at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238)
    at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1530)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1492)
    at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1731)
    at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)
    at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
    ... 12 more

似乎
prototype.ISimpleService
不在类路径中

尝试:


我已经解决了这个问题。。。但我花了比我预期的更长的时间:(

当你像我一样使用代码基参数时,如果你指向一个目录,你应该在末尾放一个尾随“/”。一旦我把它添加进去,我的服务器就成功绑定了


对于这个p上的资源,请参见

,它对我不起作用,当我添加一些System.out.println语句时,为了缩小导致问题的行,这一行是引发问题的原因:“registry.rebind(“SimpleService”,stub);”ISimpleService目前已经在服务器类中使用,并且它不会对这些行引发任何问题…@user270349这不正确。您正在考虑NoClassDefFoundError。您是对的@EJP,我将删除注释,您的注释将脱离上下文,抱歉。您能发布异常完整堆栈跟踪吗?
java -cp=C:/Users/John/Documents/NetBeansProjects/Prototype/build/classes;C:/Users/John/Documents/NetBeansProjects/Server/build/classes Server