Mastershrimp: Ausführung in Shell nicht möglich

Heyho!

Ich beginne gerade im Rahmen der Uni mit Java. Als Editor benutze ich Eclipse unter Win XP SP2, als Java-Umgebung ist das neuste JDK installiert. Habe auch das letzte Update des JRE (06) installiert.

Ich habe nun folgende Datei bla.java:

  
  
public class bla {  
  
 /**  
  * @param args  
  */  
 public static void main(String[] args) {  
  // TODO Auto-generated method stub  
  System.out.println("Test!");  
 }  
  
}  

--------------------------

Diese Datei kann ich in Eclipse's eigener Konsole auch problemlos ausführen.

Aber sobald ich das ganze per Shell ausführen möchte, kommt die Meldung "Exception in thread "main" java.lang.NoClassDefFoundError: bla".

Hier meine Eingaben:

D:>cd Java\TestProjekt

D:\Java\TestProjekt>javac bla.java

D:\Java\TestProjekt>java bla
Exception in thread "main" java.lang.NoClassDefFoundError: bla

D:\Java\TestProjekt>java -version
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)

D:\Java\TestProjekt>javac -version
javac 1.5.0_05
javac: no source files
Usage: javac <options> <source files>
...

------------------------------

Woran liegt das? Irgendwas habe ich falsch konfiguriert, aber was?
Wenn ich nach dem Problem google, finde ich zwar Leute, die ähnliche Probleme haben, aber bei denen liegts immer an Tippfehlern - hier ists aber ja definitiv nicht so, oder?

Ich weiß nicht mehr weiter ;-)

Gruß

Mastershrimp

  1. Hallo,

    Ich habe nun folgende Datei bla.java:

    Der Code sieht OK aus und funktioniert bei mir auch, daher ist's ein Fehler in Deiner Umgebung.

    Aber sobald ich das ganze per Shell ausführen möchte, kommt die Meldung "Exception in thread "main" java.lang.NoClassDefFoundError: bla".

    Ist . im CLASSPATH enthalten? (echo %CLASSPATH% auf der Kommandozeile, sollte eine mit Semikola getrennte Liste geben (oder auch nur einen Eintrag), die auf jeden Fall ».« enthält)

    Viele Grüße,
    Christian

    1. Heyho!

      Ist . im CLASSPATH enthalten? (echo %CLASSPATH% auf der Kommandozeile, sollte eine mit Semikola getrennte Liste geben (oder auch nur einen Eintrag), die auf jeden Fall ».« enthält)

      Japp! Das wars. Perfekt! Vielen Dank!

      Fürs Archiv: Die Umgebungsvariable CLASSPATH kann unter "Systemsteuerung -> System -> Erweitert -> Umgebungsvariablen" im unteren Feld bearbeitet werden. Einfach ein ";." hinzufügen.

      Bei mir hats allerdings ein paar Minuten gedauert, bis die Shell die neue Variable nimmt. Dachte deshalb zuerst, es würde nicht klappen. Einfach mal die Shell neustarten und was warten oder so ;)

      Gruß

      Mastershrimp

  2. hallo,

    Ich habe nun folgende Datei bla.java:
    public class bla {

    Da ist keine Importanweisung dabei, ist das so beabsichtigt?

    System.out.println("Test!");

    Aha, du wolltest bloß eine Testausgabe.

    Aber sobald ich das ganze per Shell ausführen möchte, kommt die Meldung "Exception in thread "main" java.lang.NoClassDefFoundError: bla".

    Was nicht viel bedeuten muß. Ich habe zum Beispiel ein recht gut funktionierendes kleines Applet, das seine Ausgaben erzeugt, wenn ich es in eine HTML einbinde. Wenn ich es von der Konsole aus aufrufe, erhalte ich aber exakt dieselbe Fehlermeldung:
      N:\Java>java anim.class
      Exception in thread "main" java.lang.NoClassDefFoundError: anim/class

    N:\Java>java -version
      java version "1.5.0"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-b64)
      Java HotSpot(TM) Client VM (build 1.5.0-b64, mixed mode, sharing)

    D:\Java\TestProjekt>javac bla.java

    Wenn es da keine Fehlermeldungen gibt, hast du lediglich deinen Codeschnipsel kompiliert.

    D:\Java\TestProjekt>java bla

    korrekt wäre der Aufruf des vollständigen Dateinamens, also "bla.class".

    Exception in thread "main" java.lang.NoClassDefFoundError: bla
    Woran liegt das?

    Mit
      java -h
    erhältst du einen sehr kurzen Hilfetext. Eclipse selbst verwende ich nicht, aber eventuell hilft dir die Eclipse-Dokumentation weiter. Eine nette und auch recht umfangreiche deutschsprachige Anleitung findest du in Java ist auch eine Insel

    Irgendwas habe ich falsch konfiguriert, aber was?

    Vermutlich hast du alles richtig konfiguriert, aber was in so ein Testbeispiel geschrieben werden soll, damit es funktioniert, solltest du dir noch etwas gründlicher anschauen.

    Grüße aus Berlin

    Christoph S.

    --
    Visitenkarte
    ss:| zu:) ls:& fo:) va:) sh:| rl:|
    1. Hallo Christoph,

      Da ist keine Importanweisung dabei, ist das so beabsichtigt?

      Was sollte für dieses einfache Beispiel importiert werden müssen?

      Ich habe zum Beispiel ein recht gut funktionierendes kleines Applet, das seine Ausgaben erzeugt, wenn ich es in eine HTML einbinde. Wenn ich es von der Konsole aus aufrufe, erhalte ich aber exakt dieselbe Fehlermeldung:
        N:\Java>java anim.class
        Exception in thread "main" java.lang.NoClassDefFoundError: anim/class

      Ja, nur handelt es sich hier nicht um ein Applet, sondern um eine vollständige Application.

      D:\Java\TestProjekt>javac bla.java

      Wenn es da keine Fehlermeldungen gibt, hast du lediglich deinen Codeschnipsel kompiliert.

      Ja, was er wohl auch nur wollte.

      D:\Java\TestProjekt>java bla
      korrekt wäre der Aufruf des vollständigen Dateinamens, also "bla.class".

      Unsinn! Siehe unten.

      java -h
      erhältst du einen sehr kurzen Hilfetext.

      Ja, da steht:
      Usage: java [-options] class [args...]
                 (to execute a class)
      Wo liest Du da etwas vom "vollständigen Dateinamen, also 'bla.class'."?

      Vermutlich hast du alles richtig konfiguriert, aber was in so ein Testbeispiel geschrieben werden soll, damit es funktioniert, solltest du dir noch etwas gründlicher anschauen.

      Unsinn!

      Nichts für Ungut! Aber Dein Posting ist ein typischer Fall für Nuhrs "... einfach mal die Klappe halten".

      viele Grüße

      Axel

      1. Hallo,

        Wenn ich es von der Konsole aus aufrufe, erhalte ich aber exakt dieselbe Fehlermeldung:

        N:\Java>java anim.class
          Exception in thread "main" java.lang.NoClassDefFoundError: anim/class

        Das sehe ich jetzt erst. Durch Deinen fehlerhaften Aufruf wird hier nicht die Klasse "anim" gesucht und nicht gefunden, wie Du vielleicht vermutest, sondern die Klasse class im Paket anim wird vermisst.

        viele Grüße

        Axel

      2. Nichts für Ungut! Aber Dein Posting ist ein typischer Fall für Nuhrs "... einfach mal die Klappe halten".

        Oha. Dann ignorier ich das Posting am besten ;)

        Hab eh nicht verstanden was man da importieren muss/kann/soll...

        Erstmal vielen Dank für eure Antworten!

        Leider ist das Problem noch nicht gelöst. Der Code MUSS korrekt sein, weil man in den 3 Zeilen (von denen 60% autogeneriert waren) ja nicht wirklich viel falsch machen kann.

        Es scheint also an meiner Umgebung zu liegen - leider habe ich davon keine Ahnung. Ich habe mal Christian Seilers Lösungsansatz umgesetzt - ohne Erfolg. Mehr dazu in meiner Antwort auf sein Posting.

        Hat jemand noch ne Idee?

        Gruß

        Mastershrimp

        1. KORREKTUR:

          Christian Seilers Lösung hat doch geklappt! Die Shell hat die Umgebungsvariable beim ersten Mal irgendwie nicht geupdatet. Jetzt klappts.

          Danke euch allen!

          Gruß

          Mastershrimp

        2. Hallo,

          Ich habe mal Christian Seilers Lösungsansatz umgesetzt - ohne Erfolg. Mehr dazu in meiner Antwort auf sein Posting.
          Hat jemand noch ne Idee?

          Es muss aber eigentlich am classpath liegen, wenn der Compiler ohne Fehler durchläuft. Gibt es daenn dann die Datei bla.class im aktuellen Verzeichnis? Wenn ja, probier mal:

          Prompt> java -cp . bla

          Damit beziehst Du das aktuelle Verzeichnis(.), also das, indem die bla.class liegt, mit in den classpath ein.

          viele Grüße

          Axel

          1. Es muss aber eigentlich am classpath liegen, wenn der Compiler ohne Fehler durchläuft.

            Siehe mein Nachtrag. Lag daran.

            Warum installiert das JDK die Variable nicht automatisch mit? Bzw. manchmal ja und manchmal nicht?

            Gruß

            Mastershrimp

            1. Hallo,

              Warum installiert das JDK die Variable nicht automatisch mit?

              Bei mir gibt es gar keine Umgebungsvariable %CLASSPATH%. Allerdings hatte/habe ich immer JDK _und_ JRE installiert. Java startet dabei aus dem JRE und das braucht keine Umgebungsvariable. Das hat das aktuelle verzeichnis automatisch im classpath. Möglich, dass dieser Automatismus beim _nur_ JDK nicht vorhanden ist.

              viele Grüße

              Axel

              1. Heyho!

                Möglich, dass dieser Automatismus beim _nur_ JDK nicht vorhanden ist.

                Aber wird mit dem JDK nicht automatisch auch das JRE installiert? Wenn man die Installation anpasst, kann man das auf jeden Fall an/abwählen.

                Gruß

                Mastershrimp

                1. Hallo,

                  Aber wird mit dem JDK nicht automatisch auch das JRE installiert? Wenn man die Installation anpasst, kann man das auf jeden Fall an/abwählen.

                  Ja, ich muss aber auf allen meinen Windows-PCs auch das eigenständige JRE installieren, weil ich Java-Anwendungen benötige, die nicht mit dem JRE im JDK (z.B. in C:\j2sdk1.4.2_09\jre\bin) und auch nicht mit der java.exe in C:\j2sdk1.4.2_09\bin\ laufen. Genau habe ich das noch nie analysiert, kann nur sagen. dass ich mit dieser Konstellation, also JDK in C:\j2sdkx.y.z\ _und_ JRE in C:\Programme\Java\ noch ie solche classpath-Probleme hatte, wie sie hier von Zeit zu Zeit auftauchen.

                  viele Grüße

                  Axel

      3. hallo,

        Dein Posting ist ein typischer Fall für Nuhrs "... einfach mal die Klappe halten".

        Bittesehr - wenn du meinst, daß die Angabe von zwei ganz nützlichen online-Dokumentationen Unsinn ist, werde ich deinen Rat beherzigen.

        Christoph S.

        --
        Visitenkarte
        ss:| zu:) ls:& fo:) va:) sh:| rl:|
        1. Hallo Christoph,

          Dein Posting ist ein typischer Fall für Nuhrs "... einfach mal die Klappe halten".

          Bittesehr - wenn du meinst, daß die Angabe von zwei ganz nützlichen online-Dokumentationen Unsinn ist, werde ich deinen Rat beherzigen.

          Darum geht es doch gar nicht. Das waren aber nur zwei nebensächliche Sätze im Posting. Hauptsächlich hast Du im Posting nämlich Dinge behauptet, die schlichtweg falsch sind:

          - »Da ist keine Importanweisung dabei, ist das so beabsichtigt?«
               -> Für den Zugriff auf System.out.* braucht man (wenn man - wie hier - explizit über den langen Namen geht) bei einer gesunden Java-Installation kein import. Das "fehlende" import hatte also nichts mit dem Problem zu tun. Wenn Du auf einen Java-Thread antwortest, dann solltest Du entweder darüber Bescheid wissen oder von vorne herein sagen, dass Du keine Ahnung vom Thema hast, aber es trotzdem mal versuchst. Beides hast Du nicht getan.

          - »korrekt wäre der Aufruf des vollständigen Dateinamens, also "bla.class".«
               -> Das ist schlichtweg falsch. java erwartet als Parameter den Klassennamen; java sucht im CLASSPATH dann nach einer Datei Klassenname.java (die auch in jar-Dateien liegen kann und vor allem nicht im gleichen Verzeichnis liegen muss).

          - »Vermutlich hast du alles richtig konfiguriert, aber was in so ein Testbeispiel geschrieben werden soll, damit es funktioniert, solltest du dir noch etwas gründlicher anschauen.«
               -> Das Testbeispiel ist vollkommen korrekt (und ich schrieb übrigens auch hinreichend lange vor Deinem Posting, dass es bei mir funktioniert) und dennoch sagst Du dem OP, dass er sich gründlicher die Doku ansehen soll, was er gar nicht braucht, denn programmiertechnisch hat er alles richtig gemacht.

          Wenn Du gepostet hättest "Schau Dir mal LINK und LINK an, vielleicht hilft Dir das weiter." oder "Ich kenne mich mit Java nicht wirklich aus, aber probier mal DAS und DAS zu machen; übrigens: HIER und HIER gibt's ne doku.", wäre das kein Problem gewesen - auch der Vorschlag, mal datei.class zu probieren, wäre kein Problem gewesen, wenn Du vorher deutlich gemacht hättest, dass Du nur rätst und nicht viel darüber weißt. Dein Posting kommt dagegen so sicher rüber, als ob Du ein Profi in dem Bereich wärst, was aber (s.o.) anscheinend nicht der Fall ist. Und genau das ist, was Axel angekreidet hat: Du gibst Ratschläge, _ohne_ dabei anzugeben, dass sie ein absoluter Schuss ins Blaue sind, weil Du im Prinzip auch keine Ahnung davon hast. Diese Art Ratschläge zu geben ist nicht verwerflich (mache ich auch öfters), aber man sollte dann auch dazuschreiben, dass es _solche_ Ratschläge sind.

          Viele Grüße,
          Christian

          1. hi,

            Dein Posting ist ein typischer Fall für Nuhrs "... einfach mal die Klappe halten".
            Bittesehr - wenn du meinst, daß die Angabe von zwei ganz nützlichen online-Dokumentationen Unsinn ist, werde ich deinen Rat beherzigen.
            Darum geht es doch gar nicht

            Oh doch, da die Formulierung "dein posting" meinen gesamten Text auf das Topic "Nuhr-Zitat" setzt, und nicht einzelne Stellen daraus. Übrigens etwas, was ich in dieser Form von Axel noch nicht kannte, er neigt sonst nicht zu derlei Pauschalisierungen, durch die eben auch die beiden links auf "Klappe halten" gesetzt werden.

            Das waren aber nur zwei nebensächliche Sätze im Posting

            Wenn ich auf externe Quellen verlinke, ist das keineswegs nebensächlich. In diesem Fall ist es sogar essentiell, da in den von mir selber angeführten Quellen auch Aussagen zu finden sein könnten, die meiner Aussage widersprechen oder sie relativieren, und ich schon erstmal selber ein paar Minuten gesucht habe, ob und was ich verlinken soll, und mich selber wenigstens nochmal flüchtig eingelesen habe - man will ja schließlich nicht auf irgendwelchen Unsinn verweisen. Bei einer Antwort ist es sogar bisweilen die Hauptarbeit, die passenden Links zu finden, und genau damit habe ich etwas Zeit verbracht, so daß mir deine Antwort[1] beim Abschicken noch gar nicht bekannt sein konnte.

            Hauptsächlich hast Du im Posting nämlich Dinge behauptet, die schlichtweg falsch sind:

            Haupsächlich bemühst du dich, ein Mißverständnis noch zu vertiefen, das Axel unterlaufen ist:

            • »Da ist keine Importanweisung dabei, ist das so beabsichtigt?«

            Das war eine simple Nachfrage, die überhaupt keine Unterstellung "impliziert", daß eine Importanweisung immer vorhanden sein müsse. Für das Allerwelts-Test-Script "Hello World" ist sie verzichtbar, wie in dem von mir selbst verlinkten Tutorial doch hoffentlich irgendwo nachgelesen werden kann.

            -> Für den Zugriff auf System.out.* braucht man (wenn man - wie hier - explizit über den langen Namen geht) bei einer gesunden Java-Installation kein import.

            Richtig, aber _hier_ nicht weiter erwähnenswert.

            [1]
            (und ich schrieb übrigens auch hinreichend lange vor Deinem Posting [...])

            Grüße aus Berlin

            Christoph S.

            --
            Visitenkarte
            ss:| zu:) ls:& fo:) va:) sh:| rl:|
            1. Hallo Christoph,

              Dein Posting ist ein typischer Fall für Nuhrs "... einfach mal die Klappe halten".
              Bittesehr - wenn du meinst, daß die Angabe von zwei ganz nützlichen online-Dokumentationen Unsinn ist, werde ich deinen Rat beherzigen.
              Darum geht es doch gar nicht

              Oh doch, da die Formulierung "dein posting" meinen gesamten Text auf das Topic "Nuhr-Zitat" setzt, und nicht einzelne Stellen daraus. Übrigens etwas, was ich in dieser Form von Axel noch nicht kannte, er neigt sonst nicht zu derlei Pauschalisierungen, durch die eben auch die beiden links auf "Klappe halten" gesetzt werden.

              Wenn ich eine Rede halte und nur Stuss erzähle und ganz am Ende noch zwei sinnvolle Bücher erwähne, würde man mir sicherlich auch (zurecht!) das Nuhr-Zitat vor den Latz knallen - und das ganz bestimmt nicht wegen den zwei Bucherwähnungen.

              Das waren aber nur zwei nebensächliche Sätze im Posting

              Wenn ich auf externe Quellen verlinke, ist das keineswegs nebensächlich.

              Du verweist auf diese Quellen im Zuge Deiner grottenfalschen Argumentation - dass die Quellen an sich nützlich sind, ist dann schlichtweg nebensächlich. Wenn ich ein Posting schreibe, in dem ich behaupte, Angela Merkel wolle die Mehrwertsteuer auf 10 Prozent *senken* und dabei auf den Koalitionsvertrag verweise, dann mag der Koalitionsvertrag zwar schon ein hilfreicher Link sein, aber das Wesentliche am Posting ist doch die grottenfalsche Aussage, nicht die Tatsache, dass der Koalitionsvertrag ganz hilfreich ist (zum darüber diskutieren). (Hmm, ich wiederhole mich)

              In diesem Fall ist es sogar essentiell, da in den von mir selber angeführten Quellen auch Aussagen zu finden sein könnten, die meiner Aussage widersprechen oder sie relativieren,

              Im Normalfall gibt man Quellen an, um Aussagen zu belegen, nicht, um sie zu wiederlegen (außer, man schreibt es extra dazu). Deswegen geht der Außenstehende auch nicht sofort davon aus, dass etwas am Inhalt des Postings nicht stimmt. Insofern bringt es für den Fragesteller nichts, 100 richtige Quellen anzugeben, wenn die Aussage dennoch falsch ist.

              und ich schon erstmal selber ein paar Minuten gesucht habe, ob und was ich verlinken soll, und mich selber wenigstens nochmal flüchtig eingelesen habe - man will ja schließlich nicht auf irgendwelchen Unsinn verweisen.

              Schade, dass der Vorsatz sich lediglich auf das »verweisen« bezieht.

              Hauptsächlich hast Du im Posting nämlich Dinge behauptet, die schlichtweg falsch sind:

              Haupsächlich bemühst du dich, ein Mißverständnis noch zu vertiefen, das Axel unterlaufen ist:

              Nein. Unabhängig von dem Punkt den Du da ansprichst: Ich habe 2 weitere Punkte genannt (die deutlich schwerwiegender sind, als der eine, den Du da ansprichst), auf die Du in Deiner Antwort nicht eingegangen bist. Die - und das, was ich im letzten Absatz schrieb - waren für mich das, was ich hauptsächlich ins Posting schreiben wollte (was auch ganz klar an der Textmenge erkennbar ist).

              Aber bitte, wenn Du Dich unbedingt an der Tatsache, dass der Punkt doch nicht falsch war (und an Deinen zwei Links) herauswinden willst:

              • »Da ist keine Importanweisung dabei, ist das so beabsichtigt?«

              Das war eine simple Nachfrage, die überhaupt keine Unterstellung "impliziert", daß eine Importanweisung immer vorhanden sein müsse. Für das Allerwelts-Test-Script "Hello World" ist sie verzichtbar,

              Und nachdem schon das "Hello World"-Beispiel nicht lief, ist eine derartige Nachfrage schlichtweg irrelevant und somit absolut nicht zielführend. Du kannst es Dir also aussuchen, ob Du lieber etwas falsches oder nicht zielführendes gesagt hast. An der Tatsache, dass Du Dir den Punkt im Posting hättest sparen können (und damit bis auf die beiden Links alles andere im Posting), ändert es nichts.

              Christian

            2. Hallo,

              Übrigens etwas, was ich in dieser Form von Axel noch nicht kannte, er neigt sonst nicht zu derlei Pauschalisierungen,

              Nein, tut er nicht. Aber er sieht hier in letzter Zeit öfter Postings von Dir, die mit anscheinend absoluter Sicherheit und Bestimmtheit etwas behaupten, was entweder gar nicht stimmt oder was nur in einem bestimmten Kontext so gesehen werden _kann_. Darauf angesprochen, windest Du dich dann heraus, indem Du _nun_(zu spät) den Kontext beschreibst, in welchem Du das angeblich gesehen haben wolltest, oder indem Du einen Verständnis-/Lese-/Aufmerksamkeitsfehler Deinerseits vorgibst. Dieses Verhalten finde ich nicht in Ordnung.

              In einer Diskussion vertritt man eine Meinung, weil man zu ihr steht und von ihrere Richtigkeit überzeugt ist. Wenn man sich irrt, dann gibt man das zu. Man kann provozieren indem man etwas in den Raum wirft, was _garantiert_ eine Diskussion auslöst. Wenn die dann aber läuft, muss man als Provokateur entweder seine Meinung untermauern oder eben signalisieren, wenn man durch die Diskussion nun seine Meinung geändert hat.

              Im Vorliegenden Fall _hast_ Du Dich einfach geirrt. Dich jetzt damit herauszureden, man hätte ja in den verlinkten Dokumenten nachlesen können, dass Du Dich geirrt hast, würde eine Provokation Deinerseits implizieren. Warum hast Du dann auf mein Posting nicht entsprechend reagiert? Du hättest alle meine Einwendungen widerlegen können oder eben zugeben können, dass Du Dich geirrt hattest. Stattdessen reduzierst Du Dein eigenens Posting auf die Angabe zweier Links. Damit wäre ohne Christians Beitrag die Diskussion für mich beendet gewesen. Das hier schreibe ich nur, weil Du auf seine Einwendungen genau so reagierst.

              durch die eben auch die beiden links auf "Klappe halten" gesetzt werden.

              Wenn das so aussehen sollte, dann nehme ich das für de Links hiermit zurück. Diese _sind_ im Zusammenhang mit Java und Eclipse natürlich _allgemein_ sinnvoll. Im konkreten Fall hättest Du aber die Stellen verlinken müssen, in denen es dort um eine Exception java.lang.NoClassDefFoundError geht.

              viele Grüße

              Axel

          2. Hallo Christian,

            [dsf 1.11]

            [dsf 2.1]
            [dsf 2.6]

            -> Für den Zugriff auf System.out.* braucht man (wenn man - wie hier - explizit über den langen Namen geht) bei einer gesunden Java-Installation kein import.

            Das ist richtig, liegt aber nicht an dem langen Namen. Der wäre hier java.lang.System.out.println("Hello World"). Es liegt daran, dass java.lang.* automatisch importiert wird.

            java sucht im CLASSPATH dann nach einer Datei Klassenname.java

            Die Anwendung "java" compiliert nicht. Sie sucht im CLASSPATH nach einer Datei Klassenname.class, in der compilierter Bytecode stehen muss. Dieser muss vorher mit dem Compiler "javac" erstellt worden sein, manchmal aus Klassenname.java.

            viele Grüße ;-)

            Axel

            1. Hallo Axel,

              Ja, Ok. ;-) Ändert aber nichts an der Grundaussage. :-)

              Viele Grüße,
              Christian

    2. Heyho!

      Da ist keine Importanweisung dabei, ist das so beabsichtigt?

      Eine Frage noch, was ist diese ominöse Import-Anweisung? Was muss/soll dort importiert werden? Ist mir bisher noch nie untergekommen (hab ja immerhin schon n paar Beispiele gelesen ;p )

      Gruß

      Mastershrimp

      1. Hallo,

        Da ist keine Importanweisung dabei, ist das so beabsichtigt?

        Eine Frage noch, was ist diese ominöse Import-Anweisung? Was muss/soll dort importiert werden? Ist mir bisher noch nie untergekommen (hab ja immerhin schon n paar Beispiele gelesen ;p )

        Mit welchem Material lernst Du Java? Schau mal dort in das Kapitel über Packages. Darüber findest Du übrigens einiges in Christophs Empfehlung http://www.galileocomputing.de/openbook/javainsel4/javainsel_03_002.htm#Rxx365java03002040000F51F025100, aber auch im Standardwerk zum Lernen von Java http://java.sun.com/docs/books/tutorial/java/interpack/usepkgs.html.

        Das Prinzip ist, dass eine Java-Klasse ja in einer Byte-Code-Datei (.class) vorliegt. Es können zwar in einer .java-Datei mehrere solche Klassen beschrieben werden, beim Compilieren entsteht aber für jede Klasse eine .class-Datei. Nun sind natürlich die Klassen, die in einer .java-Datei beschrieben werden, beim Compilieren dieser Datei bekannt. Man kann ja aber nicht _alle_ Klassen in einer .java-Datei beschreiben. Um aber Klassen, die nicht in der .java-Datei beschrieben werden, dort trotzdem nutzen zu können, muss man diese Klassen in einer import-Anweisung im Java-Quellcode bekannt machen oder eben immer mit dem vollen Bezeichner darauf zugreifen. Damit man nicht alle Klassen einzeln importieren muss, kann man Klassen zu Paketen zusammenfassen. Die Klassen dieser Pakete kann man dann mit

        import [packagename].*;

        alle in einer Anweisung importieren.

        Beispiel:
        Ohne

        import java.io.*;

        kannst Du z.B. nicht direkt

        File inputFile = new File("myfile.txt");

        schreiben, sondern müsstest

        java.io.File inputFile = new java.io.File("myfile.txt");

        schreiben. Das wird irgendwann sehr unübersichtlich.

        viele Grüße

        Axel

        1. Ok, vielen Dank.

          Ich lerne ebenfalls mit "Java ist eine Insel" - bin aber erst im 2. Kapitel ;)

          Gruß

          Mastershrimp