Hola, estoy creando un proyecto en java.rmi de un juego multijugador, y estoy teniendo varios problemas.
En mi proyecto tengo todos estos archivos:
- Autenticacion.java
- AutenticacionImpl.java
- Dibujar.java
- DibujarImpl.java
- Jugador.java
- Servidor.java
El Servidor.java es el cerebro del proyecto, primero tengo que ejecutar Servidor.java, y después ejecuto Jugador.java, para que el Servidor.java y Jugador.java, llamen a los métodos de las clases Autenticacion.java etc…
Pero, al ejecutar Servidor.java, aparece este error:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: BatallaNavalJava.Autenticacion (no security manager: RMI class loader disabled)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:392)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:714)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1570)
at java.rmi/sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:304)
at java.rmi/sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:280)
at java.rmi/sun.rmi.server.UnicastRef.invoke(UnicastRef.java:382)
at java.rmi/sun.rmi.registry.RegistryImpl_Stub.rebind(RegistryImpl_Stub.java:158)
at java.rmi/java.rmi.Naming.rebind(Naming.java:177)
at BatallaNavalJava.Servidor.main(Servidor.java:13)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at jdk.compiler/com.sun.tools.javac.launcher.SourceLauncher.execute(SourceLauncher.java:264)
at jdk.compiler/com.sun.tools.javac.launcher.SourceLauncher.run(SourceLauncher.java:153)
at jdk.compiler/com.sun.tools.javac.launcher.SourceLauncher.main(SourceLauncher.java:78)
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: BatallaNavalJava.Autenticacion (no security manager: RMI class loader disabled)
at java.rmi/sun.rmi.registry.RegistryImpl_Skel.dispatch(RegistryImpl_Skel.java:157)
at java.rmi/sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:470)
at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:299)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)
at java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:714)
at java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:598)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:844)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:721)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:720)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1570)
Caused by: java.lang.ClassNotFoundException: BatallaNavalJava.Autenticacion (no security manager: RMI class loader disabled)
at java.rmi/sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:562)
at java.rmi/java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:648)
at java.rmi/sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:240)
at java.base/java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1970)
at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1911)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2237)
at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1747)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:525)
at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:483)
at java.rmi/sun.rmi.registry.RegistryImpl_Skel.dispatch(RegistryImpl_Skel.java:154)
… 14 more
Y este es mi código:
package BatallaNavalJava;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class Servidor {
public static void main(String[] args) {
try {
LocateRegistry.createRegistry(2001);
AutenticacionImpl obj = new AutenticacionImpl();
Dibujarimpl obj2 = new Dibujarimpl();
Naming.rebind("//localhost:2001/Autenticacion", obj);
Naming.rebind("//localhost:2001/Dibujar", obj2);
System.out.println("Servidor listo");
} catch (Exception e) {
e.printStackTrace();
}
}
}
He intentado arreglar esto, pero no logré arreglarlo.