Java RMI - ClassNotFound exception
Je suis de la création d'un Java RMI programme, mais je suis une ClassNotFoundException.
Pourriez-vous les gars m'aider à comprendre? Je suis à l'aide d'Eclipse.
Quelqu'un m'a suggéré que c'était un code de problème, mais comment est-ce lié?
Voici les codes pour mon Serveur et Client:
Serveur:
package server;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;
import base.Server;
import base.RmiStarter;
public class ServerImplStarter extends RmiStarter{
public ServerImplStarter() {
super(Server.class);
}
@Override
public void doCustomRmiHandling() {
try{
Server engine = new ServerImpl();
Server engineStub = (Server)UnicastRemoteObject.exportObject(engine, 0);
Registry registry = LocateRegistry.createRegistry( 1099 );
registry = LocateRegistry.getRegistry();
registry.rebind("Server", engineStub);
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
new ServerImplStarter();
}
}
Client:
package client;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import base.RmiStarter;
import base.Server;
import base.Cell;
public class CellClient extends RmiStarter {
public CellClient() {
super(Server.class);
}
@Override
public void doCustomRmiHandling() {
try{
Registry registry = LocateRegistry.getRegistry();
Server server = (Server)registry.lookup("Server");
Cell c = null;
c = server.getcell();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
new CellClient();
}
}
et l'erreur est: est-ce
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: server.CellImpl
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
at $Proxy0.getcell(Unknown Source)
at client.CellClient.doCustomRmiHandling(CellClient.java:23)
at base.RmiStarter.<init>(RmiStarter.java:19)
at client.CellClient.<init>(CellClient.java:13)
at client.CellClient.main(CellClient.java:31)
Caused by: java.lang.ClassNotFoundException: server.CellImpl
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader.loadClass(Unknown Source)
at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at sun.rmi.server.UnicastRef.unmarshalValue(Unknown Source)
... 8 more
double possible de java.rmi.ServerException: RemoteException s'est produite dans le thread du serveur
OriginalL'auteur Rod | 2012-10-23
Vous devez vous connecter pour publier un commentaire.
À la fois le client et le serveur doivent avoir le même nom de package. J'ai eu la même erreur hier, j'ai corrigé après beaucoup de recherche. Essayez-le et dites-moi si une autre erreur vient.
Marque de cette réponse, si vous en trouvez.Merci!!!!!
Hmm...j'ai essayé cela, mais l'erreur de garder à venir. Mais je vais garder le paquet de noms de la même à partir de maintenant. Merci pour l'astuce! (Je veux dire, j'ai essayé de charger le paquet de noms de même)
Puis essayez d'ajouter le fichier à votre projet, puis ajoutez le code pour l'octroi de l'autorisation à l'aide de gestionnaire de la sécurité au serveur, reportez-vous à fragments.turtlemeat.com/rmi.php#secure .vous devez ajouter les compiler le code avec votre projet, je l'ai fait pour netbeans, aucune idée à propos de l'éclipse "java -Djava.de sécurité.gestionnaire -Djava.de sécurité.politique=politique de fichier Maclasse"
Pourquoi? Les autorisations de serveur n'ont rien à voir avec le côté client
ClassNotFoundExceptions
. Il n'a pas besoin d'unSecurityManager,
laisser seul un .politique, fichier, à moins qu'il essaie d'utiliser le code de fonction, et il n'y a pas de preuve que ce soit. Le "tutoriel" que vous citez est non-normatif et contient plusieurs erreurs. @Rod Ignorer ce trop.En fait, ce que j'essaie de faire est de suivre ce tutoriel: cs.mettre.poznan.pl/pawelw/... j'ai besoin de mettre en œuvre une Publication de l'Abonné exemple, afin que je puisse l'appliquer à mon projet de fin d'études(je travaille à l'heure actuelle). J'en suis à l'Exercice 2 de ce tutoriel. Toute aide sera très apprécié 🙂 Merci!
OriginalL'auteur akshaykumar6
CellImpl n'a pas été exporté ou mis à disposition par le client du CLASSPATH. Il doit soit (a) étendre UnicastRemoteObject ou être exportées via UnicastRemoteObject.exportObject(); ou (b) être Sérialisable et disponible sur le client du CLASSPATH.
Mettre dans le client du fichier JAR?
OriginalL'auteur user207421
Solution pour NoClassFound Exception lors de l'exécution de RMI Client.
Cas:
Le serveur et le client les fichiers sont dans des dossiers différents.
Exemple:
Côté serveur: Le serveur de l'interface et de l'implémentation du serveur sont à l'intérieur
Dossier De Projet: C:\RMIServer
Package: rmiserver
Côté Client: L'interface serveur et le client sont à l'intérieur
Dossier De Projet: C:\RMIClient
Package: rmiClient
Problème: impossible de trouver l'emplacement de l'interface du serveur.
Solution: Chez le client,
1. Créer un nom de package rmiServer (le nom du package doit être le même que le côté serveur).
2. Placez le stub serveur à l'intérieur de ce paquet.
3. L'client.java est à l'intérieur de la rmiClient paquet. Maintenant importer les rmiServer paquet dans l'client.java fichier.
importation rmiServer.*;
Cela va résoudre le classNotFound Exception qui se produit lorsque nous exécutons le côté client RMI.
OriginalL'auteur samsad beagum