ZuDumm: Bin ich soooo Doof?

Hallo,

ich befasse mich gerade ein wenig mit Java.
Ich habe mir Netbeans mit dem SDK-Kit heruntergeladen, Netbeans habe ich wieder gelöscht aber der Java-Compiler (javac) ist noch drauf, was auch gut ist (Wo bekomme ich eigentlich die SDK her ohne dieses Netbeans?).
Naja, habe versucht mein erstes "HalloWelt" Programm zu schreiben:

public class HelloWorld {
public static void main (String[] args) {
System.out.println("Hello World!");
}
}

Dann habe ich diese Datei unter Hello.java gespeichert und versucht diese dann zu Compilieren:

c:\j2sdk1\bin\javac Hello.java

dann bekomme ich aber diese Meldung:

class or interface expected
public class HelloWorld
       ^
1 error

Was läuft da falsch? Danke

  1. Hi!

    public class HelloWorld {
    public static void main (String[] args) {
    System.out.println("Hello World!");
    }
    }

    c:\j2sdk1\bin\javac Hello.java

    Was läuft da falsch? Danke

    Die Datei muss gleich heißen wie die Klasse, in der deine main-Methode liegt. Also benenn deine Klasse in Hello um oder die Datei in HelloWorld.java.

    Viele Grüße, Lukas

    --
    We looked into the crystal and we felt the fear
    but its already here, its already too late.
    Were learning to love the things that we hate, were learning to love the things that we hate.
    1. Hi,

      habe ich auch gemacht, aber leider wird jetzt eine "main" verlangt.
      Taugen beispiele aus dem Inet nix mehr?

      1. Hallo!

        habe ich auch gemacht, aber leider wird jetzt eine "main" verlangt.

        Habe leider weder Zeit noch Java installiert. Ich sehe aber auf die Schnelle keinen Fehler.

        Taugen beispiele aus dem Inet nix mehr?

        Normalerweise schon. Und immer dran denken: 99,9% der Fehler sitzen vor dem Computer ;-)

        Viele Grüße, Lukas

        --
        We looked into the crystal and we felt the fear
        but its already here, its already too late.
        Were learning to love the things that we hate, were learning to love the things that we hate.
        1. Hi,

          aber was bedeutet:

          exception in thread "main" java.lang.NoClassDefFoundError: c:\Java\HelloWorld/class

          dieses hier?

          99,9% lol :D

          1. Hallo,

            exception in thread "main" java.lang.NoClassDefFoundError: c:\Java\HelloWorld/class

            Du hast es so aufgerufen:

            java HelloWorld.class

            Du mußt es so aufrufen:

            java HelloWorld

            Gruß
            Slyh

            1. Hi,

              habe ich gemacht, dann bekomme ich diese Meldung:

              Exception in thread "main" java.lang.NoClassDefFoundError: c:\Java\HelloWorld

              Ich begreife jetzt nichts mehr.

              Hier nochmals meine Schritte:

              Editor geöffnet > folgenden Code eingegeben:

                
              class HelloWorld {  
                  public static void main(String[] args) {  
                      System.out.println("Hello World!");  
                  }  
              }  
              //Dies ist meine erste Applikation.  
                
              
              

              Dann habe ich "c:\j2sdk1.4_2_17\bin\javac c:\Java\HelloWorld.java" eingegeben.
              Dann "c:\j2sdk1.4_2_17\bin\java c:\Java\HelloWorld"

              Die Meldung:

              Exception in thread "main" java.lang.NoClassDefFoundError: c:\Java\HelloWorld

              Langsam gebe ich echt auf :(

              1. Hello,

                Dann habe ich "c:\j2sdk1.4_2_17\bin\javac c:\Java\HelloWorld.java" eingegeben.
                Dann "c:\j2sdk1.4_2_17\bin\java c:\Java\HelloWorld"

                mach dir das Leben leichter: Geh auf deinen Desktop, rechte Maustaste auf Arbeitsplatz, Eigenschaften, Erweitert, Umgebungsvariablen.
                Such in den Listen den Eintrag "PATH" und füge dort am Ende ein:
                ;c:\j2sdk1.4_2_17\bin

                Wenn du nun eine Konsole öffnest kannst du direkt javac bzw. java aufrufen, ohne immer mit den Pfaden zu jonglieren. Rufe sodann java im Verzeichnis auf, in dem auch deine kompilierte Klasse liegt. Wenn die schon nicht da liegt, wo deine .java-Datei liegt, dann lass dort zunächst erneut das javac laufen. Ich glaube, du verlierst dich im Dschungel von Verzeichnissen, Java ist äußerst wählerisch, was den Klassenpfad angeht.

                MfG
                Rouven

                --
                -------------------
                sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                Ist Dir langweilig? Willst du Spaß? Willst Du Party? Ganz einfach!!! Schicke eine SMS mit dem Bestellwort "Feuer" an die 112 und innerhalb von 5 Minuten stehen 20 Männer mit lustigen Partyhüten, Sirenen und Partywagen vor deinem Haus!  --  Herkunft unbekannt
              2. Hallo,

                du machst ja auch gleich mehrere Fehler, und baust einen wieder ein während du den anderen korrigierst. In deinem Beispiel fehlt das "public" vor "class HelloWorld".

                Versuch's mal mit folgenden Code (Datei "HelloWorld.java"):

                public class HelloWorld {  
                  
                     public static void main(String[] args) {  
                         System.out.println("Hello World!");  
                     }  
                  
                }
                

                Nun kompilierst du diese Klasse auf der Konsole mit dem Befehl:
                javac HelloWorld.java

                Daraufhin wird eine Datei HelloWorld.class angelegt.

                Aufrufen kannst du dein Programm nun mit:
                java -cp . HelloWorld

                Unter Windows muss man noch angeben wo die Klassen liegen, hier im aktuellen Verzeichnis ("."). cp ist ein Kürzel für "classpath".

                Und wenn du die Konsole leid bist, kannst du dir Eclipse installieren und dort die Klasse in einem Java-Projekt anlegen, kompilieren und ausführen.

                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. Hello,

                  du machst ja auch gleich mehrere Fehler, und baust einen wieder ein während du den anderen korrigierst. In deinem Beispiel fehlt das "public" vor "class HelloWorld".

                  ähm, nö, nicht wirklich.

                  Aufrufen kannst du dein Programm nun mit:
                  java -cp . HelloWorld
                  Unter Windows muss man noch angeben wo die Klassen liegen, hier im aktuellen Verzeichnis ("."). cp ist ein Kürzel für "classpath".

                  na ja, es sei denn, man startet java im Verzeichnis, in dem die Klassen halt liegen.

                  Und wenn du die Konsole leid bist, kannst du dir Eclipse installieren und dort die Klasse in einem Java-Projekt anlegen, kompilieren und ausführen.

                  ja, stimmt, aber erfahrungsgemäß führt der Schwall an Bibliotheken, Buildern, Classpaths, usw. dazu, dass man nie wieder im Leben in der Lage ist ein Projekt auf der Konsole zu bauen.

                  MfG
                  Rouven

                  --
                  -------------------
                  sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                  He is entertaining both out of the car and in the car because if you tell him that a corner is almost flat then he is the guy who is going to try to take it flat even if it means shunting it the other side of it, he will come with the data and say 'hey, I may have crashed and destroyed the car, but I was flat-out'. That is an interesting quality that he has!  --  Team Member on Jacques Villeneuve
                  1. Hallo Rouven,

                    du machst ja auch gleich mehrere Fehler, und baust einen wieder ein während du den anderen korrigierst. In deinem Beispiel fehlt das "public" vor "class HelloWorld".
                    ähm, nö, nicht wirklich.

                    Wenn du dir seinen unmittelbar letzten Post ansiehst, wirst du feststellen, dass das "public" doch fehlt.

                    Aufrufen kannst du dein Programm nun mit:
                    java -cp . HelloWorld
                    Unter Windows muss man noch angeben wo die Klassen liegen, hier im aktuellen Verzeichnis ("."). cp ist ein Kürzel für "classpath".
                    na ja, es sei denn, man startet java im Verzeichnis, in dem die Klassen halt liegen.

                    Nein - das ist ja das Witzige daran.
                    Aus irgendeinem Grund senden mir einige Windows-Benutzer in letzter Zeit Nachrichten darüber, dass sie meine Klasse "CreateSkin.class" nur mit dem Befehl "java -cp . CreateSkin" starten können - und eben nicht mit "java CreateSkin".
                    Bei mir unter Linux geht "java CreateSkin" ohne Probleme - eventuell ist das ein Bug in der Windows-Version von Java.

                    Und wenn du die Konsole leid bist, kannst du dir Eclipse installieren und dort die Klasse in einem Java-Projekt anlegen, kompilieren und ausführen.
                    ja, stimmt, aber erfahrungsgemäß führt der Schwall an Bibliotheken, Buildern, Classpaths, usw. dazu, dass man nie wieder im Leben in der Lage ist ein Projekt auf der Konsole zu bauen.

                    Da hast du schon irgendwo Recht - aber Entwicklungsumgebungen wie Eclipse machen das Leben ungemein leichter, und später _will_ man auf den Komfort einfach nicht mehr verzichten.
                    Nichtsdestotrotz lässt sich mit ein wenig Nachlesen im Manual trotzdem all das wieder erreichen.

                    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. Moin.

                      Aus irgendeinem Grund senden mir einige Windows-Benutzer in letzter Zeit Nachrichten darüber, dass sie meine Klasse "CreateSkin.class" nur mit dem Befehl "java -cp . CreateSkin" starten können - und eben nicht mit "java CreateSkin".
                      Bei mir unter Linux geht "java CreateSkin" ohne Probleme - eventuell ist das ein Bug in der Windows-Version von Java.

                      Siehe Doku:
                      <<QUOTE
                      The default class path is the current directory. Setting the CLASSPATH variable or using the -classpath command-line option overrides that default, so if you want to include the current directory in the search path, you must include "." in the new settings.
                      QUOTE

                      Eventuell ist unter Windows die CLASSPATH-Variable gesetzt?

                      Christoph

                    2. Hallo,

                      Nein - das ist ja das Witzige daran.
                      Aus irgendeinem Grund senden mir einige Windows-Benutzer in letzter Zeit Nachrichten darüber, dass sie meine Klasse "CreateSkin.class" nur mit dem Befehl "java -cp . CreateSkin" starten können - und eben nicht mit "java CreateSkin".

                      Das kommt daher, weil es immer noch Dösel gibt, die das Setzen der CLASSPATH-
                      Umgebungsvariable empfehlen. Sowas mußte ich auch schon hier im Forum lesen.

                      Mal davon abgesehen, dass diese Umgebungsvariable in 99,9% der Fälle unnötig
                      ist, wird sie auch noch kontraproduktiv, wenn man vergisst, darin noch das
                      aktuelle Verzeichnis (.) mit anzugeben. Dann funktioniert nämlich der von
                      dir genannte Aufruf ohne "-cp ." nicht.

                      Unter Linux hätte man übrigens dasselbe Problem.

                      Da hast du schon irgendwo Recht - aber Entwicklungsumgebungen wie Eclipse machen das Leben ungemein leichter, und später _will_ man auf den Komfort einfach nicht mehr verzichten.
                      Nichtsdestotrotz lässt sich mit ein wenig Nachlesen im Manual trotzdem all das wieder erreichen.

                      Man kann auch einfach schauen wie Eclipse die VM aufruft. Hierzu wechselt man
                      nach dem Starten eines Programms in die Debug-Perspective und läßt sich dort
                      im Debug-View die Properties des Prozesses anzeigen. Das ist üblicherweise
                      der letzte Eintrag in dem angezeigten Prozess. Im Properties-Dialog wird die
                      Command-Line angezeigt, also der Aufruf von z.B. javaw.exe.

                      Gruß
                      Slyh

                    3. Hello,

                      Wenn du dir seinen unmittelbar letzten Post ansiehst, wirst du feststellen, dass das "public" doch fehlt.

                      ja - nein. Also, ja, es ist im Posting nicht da, nein, es fehlt nicht. Ich war mir auch nicht ganz sicher, deswegen habe ich kurz eine Klasse ohne public-Modifier aufgesetzt. Das funktioniert ohne Probleme.

                      MfG
                      Rouven

                      --
                      -------------------
                      sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                      Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
                    4. Hallo Marc,

                      Bei mir unter Linux geht "java CreateSkin" ohne Probleme - eventuell ist das ein Bug in der Windows-Version von Java.

                      Bei den meisten Linux-Distributionen wird CLASSPATH auf . gesetzt.

                      Viele Grüße,
                      Christian

      2. Hallo,

        du hast wahrscheinlich die Methode nach HelloWorld umbenannt. Es müsste so lauten:

        [code lang=java]

        public class HelloWorld   {
             public static void main(String[] args)   {
                 System.out.println("Hello World!");
             }
        }

        {code]

        P.S. Ich würd dir übrigens empfehlen alsbald eine vernünftige Entwicklungsumgebung zu verwenden, zB Eclipse. Damit kannst du besonders effizient arbeiten.
        syso (tippen) + STRG + Space schreibt dir zB dann automatisch ein "System.out.println", oder du könntest dann auch einfach "getter"- und "setter"-Methoden generieren lassen als alles mühevoll selbst zu tippen.
        Das Openbook Java ist auch eine Insel führt gleichzeitig in Java und Eclipse ein. Versuche es mal. Es wird dir helfen.

        Markus

        1. Verdammt, vertippt. Ohne das hier natürlich....

          [code lang=java]

          {code]

        2. Hallo *Markus,

          P.S. Ich würd dir übrigens empfehlen alsbald eine vernünftige Entwicklungsumgebung zu verwenden

          Die hatte er ja schon und hat sie wieder gelöscht ;-)
          Es mag sich aber schon empfehlen, zumindest mal "HelloWorld" auf der Kommandozeile ausführen zu können. Die Tools direkt bedienen zu können, hilft beim Debuggen, wenn die IDE mal nicht so funktioniert, wie sie soll.

          Grüße

          Daniel

  2. Hallo,

    Wo bekomme ich eigentlich die SDK her ohne dieses Netbeans?

    NetBeans ist eine IDE, und wie man hört keine schlechte. Ich persönlich verwende
    Eclipse.

    Zur Frage:
    http://java.sun.com/ -> am rechten Rand "Java SE" klicken -> auf den
    ersten "Download"-Button klicken -> auf "Windows Offline Installation,
    Multi-language" klicken. (Nein, keine Häkchen machen, sondern direkt den Link
    klicken.) Vorher noch oben "Accept" auswählen.

    Gruß
    Slyh