RMI Initialisierung beim Server

yuro

Mitglied
Servus,

und zwar hab ich ein RMI Server+Client Verwaltungsprogramm geschrieben und hab folgendes problem.

Wenn ich den Server starte zeigt er mir im block initialisiereCDManager immer die Exception an.

also ich kann nicht mal neue CDs anlegen da wird das programm schon abgebrochen.

Hier der Code:

Java:
Manager.java:
 
    //Manager initialisieren
    public void initialisiereManager() throws RemoteException {
        File txtDat = new File("cd.txt");
        
        Scanner scanner = null;
        
        try { 
                scanner = new Scanner(txtDat);
        } catch (FileNotFoundException e){
              System.out.println("Die Textdatei cd.txt wurde nicht gefunden.\n");
              System.exit(0);
          }
          
        while(scanner.hasNext()){
            String tmp = scanner.nextLine();
            
            String[] varAuswahl = tmp.split(";");
            
            CD tmpCD = new CD();
            
            tmpCD.autor = varAuswahl[0];
            tmpCD.isbn = varAuswahl[1];
            tmpCD.kategorie = varAuswahl[2];
            tmpCD.titel = varAuswahl[3];
            
            cds.add(tmpCD);
        }
}

Woran kann das liegen?
 
die Datei wird nicht gefunden? was kann denn daran so unverständlich sein?
gibt doch aus, wohin der ziemlich ungenaue relative Pfad txtDat bei dieser Ausführung exakt hinzeigt:
Java:
System.out.println(txtDat.getAbsolutePath());
System.out.println(txtDat.exists());
oder String-Rückgabe, falls es keine Konsolenausgabe gibt
 
Ich vermute, dass Du initialisiereManager statt initialisiereCDManager und mit Exception die FileNotFoundException meintest?

Die Exception ist aber selbst erklärend, oder?

Woran kann das liegen?

Die Datei existiert nicht?
 
Also die cd.txt liegt im ordner RMIRemoteServer..

jetzt hab ich mal das versucht was mir Slater geschrieben hat.

das hier kam als ausgabe:

E:\workspace\RMIRemoteServer\cd.txt
false
Die Textdatei cd.txt wurde nicht gefunden.

Ich denke mal das ich es an die falsche stelle geschrieben hab. vor dem try/catch block.. stimmts? ???:L
 
wie könnte die Codestelle dafür relevant sein?
die Datei ist aktuell nicht vorhanden, was läßt dich anderes vermuten?
falls Windows-Explorer, heißt sie vielleicht cd.txt.txt mit ausgeblendeter Dateiendung?

benutzt die Windows-Konsole mit Befehlen wie cd + dir,
oder benutze ein Java-Programm, erstelle ein File zum Verzeichnis E:\workspace\RMIRemoteServer\
und hole dir über die entsprechende File-Methode die enthaltenen Dateien und gib deren Namen aus,

oder was zeigt die IDE (Eclipse?) an Dateien im Projekt an? evtl. Refresh ausführen
 
Zuletzt bearbeitet von einem Moderator:
E:\workspace\RMIRemoteServer\cd.txt

Ich vermute wieder einmal, Du solltest wirklich Dein Environment genauer beschreiben, dass Du den Server aus Eclipse startest?

Dann ist das ausführende Verzeichnis Dein Workspace und dann findet Eclipse "natürlich" nicht die Datei. Dann ändere den Namen wohl in RMIRemoteServer\cd.txt.

Das solltest Du auch mit einem kleinen Standalone-Testprogramm verifizieren können, das dieses auch nicht die Datei öffnen kann.

Ich denke mal das ich es an die falsche stelle geschrieben hab. vor dem try/catch block.. stimmts?

Nein, das ist schon in Ordnung so, die Exception zeigt auch genau die Zeile an, in der sie auftritt.
 
Also Refresh hab ich gemacht... ich hab die Stub.class auch ins verzeichnis von RMI Client kopiert aber er zeigt mir immernoch die Exception an.

Ja ich starte den Server direkt in eclipse.. also ich starte die rmiregistry und dann hab ich ein run definiert in den configurations wo er auf diesen Pfad zeigt.

Ich versteh jetzt nicht ganz wie du das meintest mit dem abändern des Namens.. sorry für die dumme Frage.
 
Versuch mal
File txtDat = new File("RMIRemoteServer\\cd.txt");

Du kannst auch mal versuchen das Registry-Geraffel programmatisch durchzuführen:

Java:
      LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
      Naming.rebind("Server", new Server());
 
Zuletzt bearbeitet:
> Ich versteh jetzt nicht ganz wie du das meintest mit dem abändern des Namens..
ich verstehe nicht so ganz was du daran nicht so ganz verstehst,
kann ohne konkrete Nachfrage meine Aussagen nicht beliebig umformulieren

liste dir in Java die Dateien im Verzeichnis, das wäre jetzt mein vielversprechendster Ansatz,
wird E:\workspace\RMIRemoteServer\ bzw. ein relativer Pfad . gefunden, liefert dort exists() true?
das wäre ein erfolgreicher erster Ausgangspunkt
 
Versuch mal
File txtDat = new File("RMIRemoteServer\\cd.txt");

hmm also das halt leider auch nicht funktioniert.. Es ist immernoch dasselbe.

liste dir in Java die Dateien im Verzeichnis, das wäre jetzt mein vielversprechendster Ansatz,
wird E:\workspace\RMIRemoteServer\ bzw. ein relativer Pfad . gefunden, liefert dort exists() true?
das wäre ein erfolgreicher erster Ausgangspunkt

ja das er dann true ausgibt ist mir klar.. nur wie meinste das jetzt mit dem auflisten??


... hab noch eine nebensächliche Frage.

Ich habe in meiner Manager.java Datei

Java:
public CD[] holeCDProKategorie(String kategorie) throws RemoteException {
                    int i, j = 0;
		    
		    for(i = 0; i < cds.size(); i++) {
		        if(cds.get(i).kategorie.equals(kategorie))
		            j++;
		    }
		    
		    CD[] tmp = new CD[j];
		    j = 0;
		    
		    for(i = 0; i < tmp.length; i++) {
		        if(cds.get(i).kategorie.equals(kategorie))
		            tmp[j++] = cds.get(i);
		    }
		    return tmp;  
}

deklariert und in der Client.java folgt die Ausgabe wenn der Benutzer die auswahl 3 bestätigt:

Java:
		if(wahl.equals("3")){
			System.out.println("Geben Sie eine Kategorie ein:");
			
			String katCD = scanner.next();
			
			CD[] tmp = new CD[j]; //wie kann ich das alternativ ändern?
			
			System.out.println(tmp.size()); //Fehlermeldung: cannot invoke size() on the array CD[]

			tmp = service.holeCDProKategorie(katCD);
			
			System.out.println("titel\n isbn\n autor\n kategorie\n");

			for(int i=0; i < tmp.size(); i++){      //Selbe Fehlermeldung
				CD holeCdKat = tmp.get(i);
				System.out.print(holeCdKat.titel + "\t");
				System.out.print(holeCdKat.isbn + "\t");
				System.out.print(holeCdKat.autor + "\t");
				System.out.print(holeCdKat.kategorie + "\t");
				System.out.println();
			}
		}

Könntet ihr mir da ein beispiel machen??
 
> ja das er dann true ausgibt ist mir klar..
ja wie, klappt die Ausgabe mit dem Verzeichnis oder sprichst du von deinen Vorstellungen?

> nur wie meinste das jetzt mit dem auflisten??
du kannst dir doch bestimmt vorstellen, dass es in Java eine Möglichkeit gibt, die Dateien in einem Verzeichnis aufzulisten,
ich will hier nicht alles vorgeben, ist eine File-Methode,

nutze diese, schau dir die enthaltenden Dateien an,
ist irgendeine dabei die cd.txt ähnelt aber eben dann doch nicht genau cd.txt heißt?

------

> CD[] tmp = new CD[j]; //wie kann ich das alternativ ändern?
was soll denn passieren, was stört dich an dieser Zeile?


> System.out.println(tmp.size()); //Fehlermeldung: cannot invoke size() on the array CD[]
schau dir in Lehrbüchern die Array-Kapitel an,
soviel kann man mit Arrays ja nun nicht machen, diese Grundfunktion wird doch wohl irgendwo gezeigt werden,
entsprechende Suchmaschinen-Stichwörter sind auch schnell gefunden, allein schon 'java array size'

nicht alles dem Forum überlassen, wissen muss nicht immer sein, aber zumindest etwas denken und arbeiten!
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben