Anfaenger: Java Klasse kompilieren ohne Import einer zweiten

Hi,

habe 2 Klassen in unterschiedlichen .java Dateien geschrieben:
public class Eintrag   und   public class Kontainer

Nun ist es so, dass die Kontainer Klasse ein Objekt vom Typ Eintrag verwendet und laut meinem Schulbuch muss man die Eintrag.java nicht in der Kontainer.java importieren/inkludieren, weil javac angeblich so schlau ist.
Allerdings meint javac dazu: "Cannot find Symbol Eintrag" wenn ich es versuche.
Was habe ich nun falsch gemacht bzw. wie weist man javac daraufhin, dass es einem "vertrauen" soll, dass die andre Klasse bis zur Zeitpunkt existiert?

Hoffe, ihr habt einen Tipp parat.
Schönen Sonntag noch

  1. Hi.

    Zeigst du uns bitte deinen Quelltext.?

    1. package webjava;
      import java.text.DateFormat;
      import java.util.Date;
      import java.util.Vector;
      public class Eintrag
      {
        private String datum,beschreibung;
        public Eintrag(){}
        public String getDatum(){return datum;}
        public String getBeschreibung(){return beschreibung;}
        public void setDatum(String datum)
        {this.datum=datum;}
        public void setBeschreibung(String beschreibung)
        {this.beschreibung=beschreibung;}
        private boolean empty(String s)
        {
          if(s!=null && !s.equals(""))
            return false;
          else
            return true;
        }
        public boolean valid()
        {
          if(empty(datum) && empty(beschreibung))
            return false;
          else
            return true;
        }
      }

      und

      package webjava;
      import java.util.Vector;
      public class Kontainer
      {
       private Vector einVektor = new Vector();
       public Kontainer() {};
       public void setEinVektor(Vector einVektor)
       {this.einVektor=einVektor;}
       public Vector getEinVektor()
       {return einVektor;}
       public void add(Eintrag einEintrag)
       {einVektor.addElement(einEintrag);}
       public Eintrag get(int i)
       {return (Eintrag)einVektor.elementAt(i);}
       public int size()
       {return einVektor.size();}
      }

      1. Hallo,

        liegt es vielleicht daran, dass deine Main-Methode fehlt?

        Markus

        --
        1. liegt es vielleicht daran, dass deine Main-Methode fehlt?

          JavaBean... im Package webjava.
          Sollte so stimmen.

        2. liegt es vielleicht daran, dass deine Main-Methode fehlt?

          Sollte das nicht erst Probleme beim Ausführen und nicht beim Kompilieren geben?

          --
          Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
          Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|
      2. Hallo,

        das ist also Deine Eintrag.java:

        package webjava;

        ...

        public class Eintrag
        {

        ...

        }

        Beim Kompilieren mit
        javac Eintrag.java
        entsteht eine CLASS-Datei mit der Signatur webjava.Eintrag im aktuellen Verzeichnis.

        und

        das ist Deine Kontainer.java:

        package webjava;

        ...

        public class Kontainer
        {

        ...

        public void add(Eintrag einEintrag)

        ^hier wird eine Klasse webjava.Eintrag im Verzeichnis [aktVerz]/webjava/, also [aktVerz]/webjava/Eintrag.class erwartet.
        ...

        }

        Lege im aktuellen Verzeichnis nach dem Kompilieren von Eintrag.java einen Ordner webjava an und verschiebe die Eintrag.class dorthin. Dann wird
        javac Kontainer.java
        im aktuellen Verzeichnis funktionieren. Die entstandene Kontainer.class gehört allerdings dann auch in das Verzeichnis [aktVerz]/webjava/ verschoben, damit das Package beim Ausführen funktioniert.

        Besser:
        Die Dateien Eintrag.java und Kontainer.java befinden sich im aktuellen Verzeichnis. Dann führst Du von dort

        javac -d . *.java

        aus. Dabei wird im aktuellen Verzeichnis das Verzeichnis webjava angelegt, in dem sich dann die Eintrag.class und Kontainer.class befinden.

        Lesson: Packages->Managing Source and Class Files

        viele Grüße

        Axel

  2. Hallo,

    habe 2 Klassen in unterschiedlichen .java Dateien geschrieben:
    public class Eintrag   und   public class Kontainer

    Soweit, sogut!

    Nun ist es so, dass die Kontainer Klasse ein Objekt vom Typ Eintrag verwendet und laut meinem Schulbuch muss man die Eintrag.java nicht in der Kontainer.java importieren/inkludieren, weil javac angeblich so schlau ist.

    Nein das musst du nicht. Sofern sich die java-files im selben ordner befinden.

    Allerdings meint javac dazu: "Cannot find Symbol Eintrag" wenn ich es versuche.
    Was habe ich nun falsch gemacht bzw. wie weist man javac daraufhin, dass es einem "vertrauen" soll, dass die andre Klasse bis zur Zeitpunkt existiert?

    Mit welchem Programm arbeitest du?
    Ich empfehle dir "Eclipse".
    Zudem würde ein Teil des Codes nicht schaden, um dir besser zu helfen.

    1. Nein das musst du nicht. Sofern sich die java-files im selben ordner befinden.

      ich bin direkt im Verzeichnis, wo ich javac Eintrag.java mache, was klappt. und bei javac Kontainer.java gibts den Fehler, obwohl ich noch immer im selben Verzeichnis bin.

  3. Hallo Anfaenger,

    deine Ordnerstruktur sieht also wie folgt aus:

    ./webjava/
    ./webjava/Eintrag.java
    ./webjava/Kontainer.java

    Wenn du dich nun im Ordner webjava befindest, so wird der Befehl "javac Eintrag.java" funktionieren, da die Klasse "Eintrag" keine weiteren Klassen benötigt.
    "javac Kontainer.java" schlägt aber fehl, weil es eine Klasse "Eintrag" im Paket "webjava" suchen wird, also in einem weiteren Unterordner, quasi an der Position ./webjava/webjava/Eintrag.class - aber diese Datei gibt es natürlich nicht.

    Du musst den Kompiliervorgang vom Hauptverzeichnis aus starten, also:
    javac webjava/Eintrag.java
    javac webjava/Kontainer.java

    Grüße

    Marc Reichelt || http://www.marcreichelt.de/

    --
    panic("Oh boy, that early out of memory?");
            linux-2.2.16/arch/mips/mm/init.c
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
    1. danke, das wars!