将Netbeans上现有的java项目移植到另一台机器上,然后运行它会产生不受支持的ClassVersionError

将Netbeans上现有的java项目移植到另一台机器上,然后运行它会产生不受支持的ClassVersionError,java,exception,rmi,Java,Exception,Rmi,我开始使用远程方法调用在java上为客户机-服务器机器编码。代码在我的机器上运行良好。它基本上向客户机发出命令,客户机处理这些命令并做出相应的响应。执行命令后,机器将其状态发回服务器。例如,服务器从客户端请求图像提要,客户端将图像返回给服务器 我使用git克隆当前项目并将其推送到另一台机器上。当我执行客户端代码时,它工作得非常好,我将源代码推送到的另一台机器会以应有的方式响应 但是,当我在另一台机器上运行服务器端代码时,它会给出一个神秘的错误,上面说: C:\Users\RdX\Desktop\

我开始使用远程方法调用在java上为客户机-服务器机器编码。代码在我的机器上运行良好。它基本上向客户机发出命令,客户机处理这些命令并做出相应的响应。执行命令后,机器将其状态发回服务器。例如,服务器从客户端请求图像提要,客户端将图像返回给服务器

我使用git克隆当前项目并将其推送到另一台机器上。当我执行客户端代码时,它工作得非常好,我将源代码推送到的另一台机器会以应有的方式响应

但是,当我在另一台机器上运行服务器端代码时,它会给出一个神秘的错误,上面说:

C:\Users\RdX\Desktop\Thiswa
javax.naming.NamingException [Root exception is java.rmi.ServerError: Error occurred in          server thread; nested exception is: 
java.lang.UnsupportedClassVersionError: javadrone/Server (Unsupported major.minor   version 51.0)]
at com.sun.jndi.rmi.registry.RegistryContext.rebind(RegistryContext.java:159)
at com.sun.jndi.toolkit.url.GenericURLContext.rebind(GenericURLContext.java:249)
at javax.naming.InitialContext.rebind(InitialContext.java:427)
at javadrone.server.ServerImpl.<init>(ServerImpl.java:46)
at javadrone.server.DroneServer.<init>(DroneServer.java:45)
at javadrone.server.DroneServer.main(DroneServer.java:84)
Caused by: java.rmi.ServerError: Error occurred in server thread; nested exception is: 
java.lang.UnsupportedClassVersionError: javadrone/Server (Unsupported major.minor    version 51.0)
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:349)
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:534)
at     sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at com.sun.jndi.rmi.registry.RegistryContext.rebind(RegistryContext.java:157)
...5 more
是生成错误的行

我搜索了很多地方,他们说当JDK compliler的版本高于JRE版本时,可能会产生这样的错误

但是,我卸载了所有以前的JDK和JRE,并在安装JDK 7.03后重新编译了代码。它仍然给出了同样的例外

为什么会发生这种情况?我该如何纠正它?

您可能认为您已经删除了所有其他JDK和JRE,但我强烈怀疑您没有真正删除它们

您尚未说明如何运行服务器代码,但我建议您尽早登录System.getPropertyjava.version-我相信您会发现您使用的JRE比您想象的要早

类文件版本51.0是Java7,如果您使用JDK7编译它,这是有意义的。这正是你用来运行代码的问题所在

如果您正在跑步:

java ...

在命令行中,我建议您尝试显式运行特定版本的Java,包括可执行文件的完整路径。

完整的项目在这里:,如果您需要更多信息。我检查了注册表和HKEY_LOCALMACHINE/SOFTWARES/JavaSoft部分,并将其与我的另一台计算机进行了比较,条目完全匹配。如果您是这样要求的,那么服务器代码将在注册中心中运行。客户端通过显式提供IP地址连接到服务器,它实际上扫描自己子网中的所有IP,并找到潜在的候选地址。@javajava:Registry条目除外,它显然没有运行Java 7。客户机所做的与此无关——这里重要的只是服务器的启动方式。您运行了哪个版本的注册表?
namingContext.rebind(RMI_PROT + name, ServerImpl.this)
java ...