rmi java.lang.ClassNotFoundException: testrmi2.fileserverimpl_Stub

Hallo Leute, ich programmiere eine einfache rmi-Anwendung, aber ich habe ein Problem. Wenn ich die Registrierung im selben Verzeichnis ausführe, funktioniert es. aber wenn ich das verzeichnis ändere, von dem aus ich die registrierung starte, nicht. Ich denke, es ist unmöglich, diese Situation. Die Registrierung würde generisch von einem anderen Host aus funktionieren, aber nur die Änderung des Verzeichnisses würde seine Funktionalität beeinträchtigen. Ich arbeite an diesem Problem seit 3 ​​Tagen ohne Lösung, ich ändere auch jede mögliche Konfiguration des Codebasisparameters aber nichts. Ich beschreibe die Situation und den Code mit dem Verzeichnis:

fileserver.java:

`package testrmi2;
import java.rmi.*;

public interface fileserver extends Remote  {
 public void scrivifile(String nomefile, String arg) throws  RemoteException;
}

`fileserverimpl.java:

    package testrmi2;

import java.io.*;
import java.rmi.*;
import java.rmi.server.*;

public class fileserverimpl extends UnicastRemoteObject implements fileserver{
  public fileserverimpl() throws RemoteException {
    super();
  }
  public void scrivifile(String nomefile, String arg) throws RemoteException {
    try {
      FileWriter myfile = new FileWriter(nomefile);
      myfile.write(arg);
      myfile.close(); }
    catch (Exception e) {System.out.println(e);}
  }
  public static void main (String arg[]) {
    try {
       fileserverimpl s = new fileserverimpl();
        if (System.getSecurityManager() == null) {
            System.setSecurityManager(new RMISecurityManager());
        }
        String codebase = System.getProperty("classpath");
        System.out.println("Trying to access code base: " + codebase+"\n\nuse is "+System.getProperty("useCodebaseOnly"));
       Naming.rebind("//127.0.0.1:2005/fileserverimpl", s);
       System.out.println("Server attivato.");
} catch (Exception e) {System.out.println("errore inizializzazione server\n\n"+e.getMessage()+"\n\n\n");

}}}

client.java:

    package testrmi2;

import java.rmi.*;
import java.io.*;

public class client {
  public static void main (String arg[]) {
    fileserver myserver;
    String nomefile=" ";
    String testo=" ";
    System.out.println("Scrivi il nome del file");
    nomefile=ReadString();
    System.out.println("Scrivi il testo");
    testo=ReadString();
    try {
       myserver = (fileserver)   Naming.lookup("//127.0.0.1:2005/fileserverimpl");
        myserver.scrivifile(nomefile, testo);
      } catch (Exception e) {System.out.println(e);}
    }

   public static String ReadString() {
      BufferedReader stdIn =new BufferedReader(new InputStreamReader(System.in));
      String s=" ";
     try{
       s=stdIn.readLine();
      }
       catch(IOException e) {System.out.println(e.getMessage()); }
    return s;
   }
}

und die Richtliniendatei ist:

grant {
        // Allow everything for now
        permission java.security.AllPermission;
}; 

Alle diese Dateien befinden sich im Verzeichnis:

/ Benutzer / franco / Desktop / prova

zum kompilieren gehe ich in das / users / franco / desktop / prova verzeichnis und mache im terminal:

javac -cp . -d . *.java
rmic rmic testrmi2.fileserverimpl
jar cvf testrmi2.jar testrmi2/fileserver.class testrmi2/fileserverimpl_Stub.class

nachdem ich die Registrierung in einem anderen Terminal mit den folgenden Befehlen aber in einem anderen Verzeichnis ausgeführt habe:

export classpath=""
rmiregistry 2005 &

Zum Schluss würde ich die filesereveimpl.class mit Terminal im Verzeichnis / Users / franco / Desktop / prova ausführen und schreiben:

java -classpath /Users/franco/Desktop/prova/ -Djava.rmi.server.codebase=file:/Users/franco/Desktop/prova/testrmi2.jar  -Djava.security.policy=testrmi2/policy testrmi2.fileserverimpl &

aber die Ergebnisse sind:

    Trying to access code base: null

use is null
errore inizializzazione server

RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: testrmi2.fileserverimpl_Stub

Ich versuche auch, er jar auf einem lokalen Webserver xampp zu veröffentlichen und versuche, mit folgendem auszuführen:

java -classpath .  -Djava.rmi.server.codebase=http://127.0.0.1/testrmi2/  -Djava.security.policy=testrmi2/policy  testrmi2.fileserverimpl &

oder mit :

java -classpath .  -Djava.rmi.server.codebase=http://127.0.0.1/testrmi2.jar  -Djava.security.policy=testrmi2/policy  testrmi2.fileserverimpl &

aber ich habe die gleichen ergebnisse.

Bitte hilf mir!!! Ich werde verrückt !!!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage