1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Fragen zum Java-Einstieg

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Jazz Kartell, 30.03.07.

  1. Hallo zusammen,

    ich habe gerade beschlossen, parallel zu C++ auch gleich noch Java zu lernen...
    Und nach den ersten paar Gehversuchen stellen sich mir folgende Fragen:

    - Für C++ benutze ich Xcode und für Java habe ich mir NetBeans runtergeladen, weil ich irgendwo gelesen habe, dass sich Xcode nur bedingt für die Java-Entwicklung eignen würde. Könnt Ihr das bestätigen oder kann man mit Xcode alles machen, was man mit z.B. NetBeans machen kann?

    - Eine Frage zu NetBeans: Da ich ja jetzt ziemlich viele kleine Java "Programme" basteln werde, angefangen mit "HalloWelt" :), brauche ich eine übersichtliche Darstellung (Buch/Kapitel/Programm). In Xcode habe ich meine Ordner, in denen die ganzen Dateien verteilt sind. In NetBeans bekomm ich das nicht hin. Sehe ich das richtig, dass in NetBeans alles was einzeln ausführbar sein soll auch ein eigenes Projekt sein muss?

    - Nun zum eigentlichen Problem:
    Ich habe Java 6 installiert und es auch geschafft, dass NetBeans diese Version benutzt... Nicht lachen, gönnt mir mein Erfolgserlebnis...

    Zunächst der Quelltext:

    import java.io.*;

    public class Eingabe {

    public static void main (String[] args) {

    String name;
    int geburtsjahr;


    Console cons=System.console();


    cons.printf("\n");
    cons.printf("Bitte geben Sie Ihren volständigen Namen ein: ");
    name = cons.readLine();

    cons.printf("Bitte geben Sie Ihr Geburtsjahr ein: ");
    String eingabe = cons.readLine();
    geburtsjahr = Integer.parseInt(eingabe);
    cons.printf("\n");

    cons.printf(" %1$f, %2$d war ein sehr guter Jahrgang!", name, geburtsjahr);
    cons.printf("\n");
    }
    }

    Diese Console Funktion ist wohl neu in Java 6 und macht wohl das Handling von Stringeingaben leichter...
    Nun bekomme ich aber beim Ausführen einen Null Pointer Exception error bei cons.printf("\n"); Da bin ich verwirrt, was ein Null Pointer ist, ist mir bewusst, aber in diesem Zusammenhang ist mir das schleierhaft.

    Vielen Dank für Eure Hilfe
     
  2. smile

    smile Klarapfel

    Dabei seit:
    11.01.05
    Beiträge:
    280
    Eine Nullpointer Exception bekommst Du immer dann, wenn Du versuchst auf ein Objekt zuzugreifen, welches nicht existiert. Im Fall von

    cons.printf("\n");

    kann das eigentlich nur das cons Objekt sein, da es das einzige Objekt in der Zeile ist. Andererseits hast Du ja zuvor schon erfolgreich mit dem cons gearbeitet <amKopfKratz />

    Ahh, das fliegt Dir oben, direkt nach der (vergeigten) Zuweisung schon um die Ohren!?

    Bevor man auf einem neuen Objekt arbeitet, sollte man immer erstmal gucken, ob es auch wirklich korrekt erzeugt wurde. Also sowas wie

    if (cons != null) {

    }

    einbauen...
     
  3. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    "Immer" halte ich für etwas übertrieben. Wenn man allerdings unsicher ist, ob die Objekt-Referenz auf NULL zeigen könnte, ist das Vorgehen natürlich dringend angeraten. Vor allem im speziellen Fall von System.console(), da sich die Java-API folgendermaßen dazu äußert:
     
  4. macmondamin

    macmondamin Zuccalmaglios Renette

    Dabei seit:
    17.04.06
    Beiträge:
    258
    ich programmier auch gerne und viel in JAVA, bin absolut von der freien Entwicklungsumgebung Eclipse überzeugt. Bitte mal anschauen!

    Gruß!
     
  5. Habe ich schon mal angeschaut. Ich werde allerdings bei Xcode und NetBeans bleiben. Die zwei sind ja auch nicht die schlechteste Wahl :)

    Mein Englisch ist nicht wirklich schlecht, aber das verstehe ich nicht... Ist das wirklich ein kompletter Satz?

    Ja, gleich beim ersten cons.printf .
    Rein logisch müsste dann doch alles unter der Initalisierung
    Console cons=System.console(); in die if-Abfrage? Also: ist cons kein Null Pointer, mach den Rest...
    Oder was müsste in der if-Anweisung stehen?

    Ist insgesamt also das Problem, dass das Objekt cons nicht richtig initalisiert wurde, sprich gar nicht existiert? Aber warum? Im Quelltext ist doch kein Fehler, oder doch?

    Vielen Dank für die schon gegebene Hilfe

    Frohes Frühstücken
     
  6. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Da steht halt, es wird die Systemkonsole zurückgegeben, falls eine existiert, ansonsten halt 'null'

    Nein, im Quelltext ist so gesehen kein Fehler. Dein System hat einfach keine Systemconsole. Ich kenne Netbeans nicht, daher weiß ich nicht, was es bedeutet, wenn "Netbeans Java 6 benutzt". Ich vermute, Netbeans benutzt zwar das Java 6, wenn es den Code compiliert, wenn das Programm aber gestartet wird, läuft es dann eben doch nicht unter Java 6.

    MacApple
     
  7. Okay, das ist sehr komisch.
    Diesen console Befehl gab es wohl in Java 5 noch nicht. Ich habe in NetBeans eingestellt, dass er eben Java SE 6 und nicht Java 5 verwenden soll. Auch im Terminal wird mir die 6er Version angezeigt. Somit müsste standartmäßig die 6er Version genutzt werden, also auch beim Ausführen. Auch die Autovervollständigung in NetBeans kennt die "console" Funktion.
    Ich komm nicht drauf, was da schief läuft, Funktion ist bekannt, keine Fehler beim kompilieren, aber nen Null Pointer, also doch unbekannte Funktion.
    Ich habe das Problem jetzt auch beim OSXEntwicklerforum gepostet. Ich bin gespannt.
    Könnte es evtl. sein, dass besagte Funktion in der Prerelease Version von Java SE 6 einfach noch nicht integriert ist, so nach dem Motto, steht in der Liste, ist aber noch nicht drin? Man weiß es nicht.
     
  8. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    Nein, ein Null Pointer heisst nicht, dass die Funktion nicht bekannt ist. Du bekommst von System.console() einfach kein Consolen-Objekt geliefert sondern einen NULL-Wert. Wahrscheinlich unterstützt die JVM bei dir (evlt. generell auf dem Mac) die Console nicht - damit bist du im "otherwise null" Fall.
     
  9. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Starte mal

    /Applications/Utilities/Java/Java SE 6/Java Preferences

    und schau mal nach, ob in der Liste unter "Java Programm Laufzeit-Einstellungen" "Java SE 6" an oberster Stelle steht.

    MacApple
     
  10. Steht an erster Stelle...
     
  11. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Dann scheint die Mac OS X Version von Java 6 noch ein Problem mit der Systemkonsole zu haben.

    MacApple
     
  12. Das hoffe ich. Gibt es irgendwo eine Informationsquelle, wo man dazu Informationen bekommen kann?

    Oder besser: Hat hier jemand eine Linux oder Windows Umgebung in der er das obige Programm mal testen kann?
     
  13. smile

    smile Klarapfel

    Dabei seit:
    11.01.05
    Beiträge:
    280
  14. MacApple

    MacApple Lord Grosvenor

    Dabei seit:
    05.01.04
    Beiträge:
    3.470
    Die Dokumentation zur Java SE 6 Preview gibt es als seperaten Download an gleicher Stelle wie die Preview selbst.

    MacApple
     
  15. Das ist mir klar. Ist auch schon längst runtergeladen. Aber dort finde ich nichts zu system.console().
    scheint wohl tatsächlich so zu sein, dass das release diese funktion einfach noch nicht unterstützt.
     
  16. SizzLorr

    SizzLorr Grahams Jubiläumsapfel

    Dabei seit:
    02.08.06
    Beiträge:
    107
    ICh würde Eclipse nehmen. Früher oder später kommst du dahin. Ich programmiere zwar unter Windows und kenne die OSX alternativen nicht aber IMHO ist das hier die beste Wahl zumal auch kleinere Fehler unterkringelt werden und du Objekte besser verfolgen kannst.

    Am Anfang würde ich garnicht mit Eingaben arbeiten sondern direkt fest mit Variablen und denen einen Wert zuweisen. Wenn man es richtig machen will müsste man auch noch mit Try und Catch usw arbeiten und falsche Eingaben damit abfangen.

    Warum arbeitest du bei der Ausgabe nicht mit System.out.println( );

    Exceptions kommen auch schon wenn du mit der Konsole kompilierst und nen Rechtschreibfehler hast im Sinne von Groß/Kleinschreibung im Namen.
     
  17. Hab mir Eclipse besorgt und werd damit jetzt mal weiter machen.

    Ich fange ja grad erst mit Java an. Laut dem Buch das ich benutze, ist ein Nachteil von System.out.prinln(), dass keine Umlaute ausgegeben werden können. Dies ist jetzt in Java 6 durch die oben verwendete Funktion möglich.
     
  18. Trapper

    Trapper Boskop

    Dabei seit:
    12.05.05
    Beiträge:
    213
    Da bin ich aber froh, dass das meiner JVM noch niemand gesagt hat:
    ;)
     
  19. Tengu

    Tengu Apfel der Erkenntnis

    Dabei seit:
    05.02.07
    Beiträge:
    721
    Also ich meine, wer ganz vorne mitprogrammiert, braucht java 6, sofort. Der Rest der Welt könnte selbst Java 3 noch nehmen. ;)
     

Diese Seite empfehlen