[Java]RMI Beispiel ausführen

Unereichbar

Lt. Junior Grade
Registriert
Mai 2010
Beiträge
343
Hallo Leute,

ich habe noch nie mit Java gearbeitet (nur C,C++ und C#). Nun soll ich aber eine kleine Übung mit Java RMI machen. Dafür wollte ich folgendes Beispiel ausführen:

http://docs.oracle.com/javase/7/docs/technotes/guides/rmi/hello/hello-world.html

Ich konnte die .java Dateien kompilieren zu .class Dateien. Dafür habe ich einfach auf dem Desktop einen Ordner angelegt. Also ohne den -d DestDir Parameter.

Es funktioniert auch die rmiregistry zu starten.

Aber sobald ich den Server starten möchte mit dem vorgegebenen Befehl:
start java -classpath classDir -Djava.rmi.server.codebase=file:classDir/ example.hello.Server

Ich habe auch schon versucht den -classpath classDir und classDir/ wegzulassen. Es geht lediglich ein Konsolenfenster auf und sofort wieder zu. Ich kann nichts sehen.

Wie bekomme ich denn den Server gestartet?
 
Dann sagt er:
Fehler: Hauptklasse example.hello.Server konnte nicht gefunden oder geladen werden

Habe folgenden Aufruf gemacht:
java -Djava.rmi.server.codebase=file: example.hello.Server
 
Lösch mal die Package Zeile: package example.hello;

und start dann java -Djava.rmi.server.codebase=file: Server
 
Zuletzt bearbeitet:
Code:
java -classpath classDir -Djava.rmi.server.codebase=file:classDir example.hello.Server

Mit -Djava.rmi.server.codebase gibt man das Verzeichnis an, wo die Server-Dateien liegen. Bei Dir steht dort nichts. Keine Ahnung, ob das auf das aktuelle Verzeichnis aufgelöst wird oder nicht. Ich würde Klassenpfad und Server-Codebase explizit setzen.
 
Jetzt funktioniert alles, super! Vielen Dank!

Aber wieso? Und wie bekomme ich es mit der package Zeile zum laufen?
Ergänzung ()

soares schrieb:
Code:
java -classpath classDir -Djava.rmi.server.codebase=file:classDir example.hello.Server

Mit -Djava.rmi.server.codebase gibt man das Verzeichnis an, wo die Server-Dateien liegen. Bei Dir steht dort nichts. Keine Ahnung, ob das auf das aktuelle Verzeichnis aufgelöst wird oder nicht. Ich würde Klassenpfad und Server-Codebase explizit setzen.

Und wo liegen die Server-Dateien? Ich habe alle Beispieldateien auf dem Desktop in HelloWorl, also: C:\Users\udontknow\Desktop\HelloWorld
 
Die packages repräsentieren eine Ordner Struktur, er sucht in einem Ordner example nach einem Ordner hello und in diesem Ordner nach einer Server.class. Wenn kein Package angegeben ist sucht er die Class-Datei im aktuellen Pfad. Zum Thema RMI kann ich dir nicht helfen.
 
Die .class Dateien liegen dort, wo sie kompiliert wurden. Vermutlich unter C:\Users\udontknow\Desktop\HelloWorld. Gibt es dort ein Verzeichnis "example\hello" mit einer Datei "Server.class"?
 
soares schrieb:
Die .class Dateien liegen dort, wo sie kompiliert wurden. Vermutlich unter C:\Users\udontknow\Desktop\HelloWorld. Gibt es dort ein Verzeichnis "example\hello" mit einer Datei "Server.class"?

Nein gibt es nicht :D Okay, aber vielen Dank schonmal. Dann muss ich jetzt auf die Ordnerstruktur achten. soares, kannst du mir beim Thema RMI helfen?
 
Aus welchem Verzeichnis rufst Du java den auf? Wenn es ohne package und Klassenpfad ging, müssen die Dateien in diesem Verzeichnis liegen.

Mit RMI habe ich vor 10 Jahren mal gespielt. Verwendet man heute nicht mehr, von daher müsste ich vermutlich auch recherchieren.
 
Dann liegt dort C:\Users\udontknow\Desktop\HelloWorld\Server.class?

Füge das package Statement wieder ein, kompiliere neu, dann sollte die Server-Klasse unter C:\Users\udontknow\Desktop\HelloWorld\example\hello zu finden sein.
 
Das ist imho schon in Ordnung so. Jetzt habe ich die Übung fast genauso wie ich sie brauche. Jetzt muss ich nur noch etwas mit Makefile und soweiter hinbekommen.

Dannach soll mit dem Befehl speicher <name> der Server gestartet werden. Funktioniert auch so, nur das man halt java davor schreiben muss. Aber ich denke da kommt man nicht drumherum.
 
Zurück
Oben