kein Zugriff auf eine Klasse in einem Unterordner

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

in einem Ordner c:\vfh\ liegt die Klasse eingabe.
Diese ruft mit
Code:
import bib.*;
/**
 * Dateiname	: eingabe.java
 * Beschreibung 
 *
 * @author      
 * @version    
 */

public class eingabe {
	

	public static void main( String[] args )

		{
		int i;
		i=32;
		eingabe2 MeinObjekt = new eingabe2();
		MeinObjekt.methode2();

		}


}

die Methode methode2() der Klasse eingabe2 auf.
Die Klasse eingabe2 wiederum liegt im Ordner bib:
c:\vfh\bib

Code:
package bib;
import java.io.*;

/**
 * Dateiname	: eingabe2
 * Beschreibung : 
 *
 * @author      
 * @version     
 */

public class eingabe2 {
	
	
	public void methode2()
{ ...    	

		}// methode2()		
...
}// eingabe2

Wenn zusätzlich die Klasse eingabe2 auch noch im Ordner liegt, in dem sich eingabe
befindet, dann funktioniert alles bestens. Wenn jedoch eingabe2 NUR im angegebenen
Unterordner liegt bekomme ich die Fehlermeldung:

cannot access bib.eingabe2

Kann jemand nachvollziehen, warum das so ist?

Gruss und Dank
Jan
 
aha! das bedeutet man muss von einem speziellen Ort aus
kompillieren?

Gruss
Jan
 
Das bedeutet, dass ich das ohne Probleme compilieren konnte mit genau diesen Verzeichnisstrukturen und herausfinden möchte, was du anders gemacht hast 😀

Ich befand mich im Verzeichnis
C:\vfh\bin

und habe von dort aus kompiliert mit:

C:\vfh\bin> javac -sourcepath .. ..\eingabe.java

und konnte danach das Programm ohne Fehler starten:

C:\cfh\bin> java eingabe
 
hallo moormaster, danke fuer die Antwort.

Ich habe es so gemacht:


eingabe1.JPG


Gruss Jan
 
Offensichtlich gibt es noch ein Überbleibsel einer eingabe2 Klasse, bereits compiliert wurde aber nicht im richtigen package liegt oder Ähnliches...

Lösche einfach mal alle .class Dateien und compilier dann nochmal.
 
Hi,

soll ich vom Hauptordner aus compilieren? oder ist das egal?

Gruss
Jan
 
Es ist prinzipiell möglich von überall aus zu compilieren, wenn du die Parameter entsprechend angibst.

Wenn du den -d Parameter nicht angibst, dann landen die frisch compilierten Sachen im aktuellen Verzeichnis (bzw. die Verzeichnisse der Packages werden im aktuellen Verzeichnis angelegt)

Wenn die compilierten class-Dateien woanders landen sollen, muss dieses andere Verzeichnis nicht nur über den -d Parameter angegeben werden, sondern zusätzlich noch in den classpath aufgenommen werden mit Hilfe des -cp Parameters. Es kann auch sein, dass -cp in diesem Fall nicht zwingend notwendig ist... Wenn du aber compilierte Klassen verwendest, die nicht unter Quelldateien vorkommen, dann muss das entsprechende Verzeichnis auf jeden Fall mit Hilfe von -cp in den Classpath aufgenommen werden.

Eine 3. Sache, auf die zu achten ist, wäre, wo das Quellverzeichnis liegt. Wenn das aktuelle Verzeichnis nicht das Verzeichnis mit den Java-Quelldateien (und den entsprechenden Unterverzeichnissen der packages) ist, dann muss das Quellverzeichnis mit Hilfe des -sourcepath Parameters angegeben werden.

Das ganze ist auch hier nachzulesen:

http://java.sun.com/javase/6/docs/technotes/tools/windows/javac.html

sowie in dem Buch "Java ist auch eine Insel" und mit Sicherherheit ist es auch noch in der Forums FAQ beschrieben 😀
 
Hallo nochmal,

ich habe ALLE eingabe.class und eingabe2.class wie von Dir beschrieben
gelöscht. Dann habe ich eingabe.java aus dem Verzeichnis heraus compiliert,
indem sich eben eingabe.java befindet.
Danach habe ich eingabe2.java wiederum aus dem Verzeichnis heraus compiliert,
in dem sich eben eingabe2.java befindet.

Es hat alles wunderbar geklappt.

Du hattest also genau den richtigen Riecher mit der Annahme, dass sich Kopien von
eingabe.java und eingabe2.java sowie deren compilierten Klassen Datei auf diversen
Unterordnern befanden.

SUPER! Ich danke Dir, dass Du mir so toll geholfen hast.

Ein Letztes bitte noch: weisst Du auch WARUM diese Kopien den Vorgang gestört haben.

Jetzt schmal: :toll:

Lieben Gruss aus Hamburg
Jan
 
Anonymous hat gesagt.:
Ein Letztes bitte noch: weisst Du auch WARUM diese Kopien den Vorgang gestört haben.

Kann es sein, dass du die eingabe2.class Datei compiliert hast, als sie noch in einem anderen package war und sie dann einfach verschoben hast?

Aus deinem Screenshot ist zu entnehmen, dass er zwar eine eingabe2.class im Ordner bin gefunden hat, diese aber noch nicht dem package bib angehört.

Evtl. hast du auch nur mal den Ordner bib umbenannt nachdem du schonmal compiliert hattest... das könnte zu ähnlichen Phänomenen führen...

Daher ist es sinnvoll, Quelltext und class-Dateien in getrennten Verzeichnissen zuhandhaben.

Du könntest z.B. folgende Verteichnisstruktur anlegen:

c:\vfh\src
c:\vfh\src\diversepackages
...
c:\vfh\bin

so dass sich alle Quelltexte im "src" Ordner befinden und die Class-Dateien nach "bin" compiliert werden.
Dann kommen oben erwähnte Parameter auch wieder ins Spiel, je nachdem, von wo aus du compilierst.

z.B. von C:\vfh aus:

javac -d bin -sourcepath src -cp bin src\Hauptklasse.java


So brauchst du jedes Mal nur das "bin" Verzeichnis vorher zu leeren, um derartige Fehler einfacher auszuschliessen.
 
moormaster hat gesagt.:
Kann es sein, dass du die eingabe2.class Datei compiliert hast, als sie noch in einem anderen package war und sie dann einfach verschoben hast?

Aus deinem Screenshot ist zu entnehmen, dass er zwar eine eingabe2.class im Ordner bin gefunden hat, diese aber noch nicht dem package bib angehört.

Evtl. hast du auch nur mal den Ordner bib umbenannt nachdem du schonmal compiliert hattest... das könnte zu ähnlichen Phänomenen führen...

Man bist Du gut, Hut ab. Genauso muss es gewesen sein. Ausserdem bin ich noch ziemlich unsicher,
mit den Verzeichnisstrukturen und -beziehungen.

Danke auch fuer den "Ordner-Tip".

Nochmal lieben Gruss und schönes Wochenende

Jan
:applaus:
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben