Marc Reichelt: (JAVA): java.xml gibt es nicht unter SuSE Linux?

Hi an alle!

Für meine opened2kdb (Datenbank für legale ed2k-Links) möchte ich nun ein Programm mit Java schreiben (grafische Oberfläche).

Nun bin ich mittlerweile soweit dass ich eine kleines Fenster mit JFrame anzeigen lassen kann, und nun will ich die XML-Datei parsen.

Doch wenn ich am Anfang des Dokuments folgenden Code eingebe:
import javax.xml.*;
gibt er mir beim Kompilieren folgenden Fehler aus:
-----
marc@pcmr:/srv/www/htdocs> javac opened2kdb_reader.java
opened2kdb_reader.java:2: package javax.xml does not exist
import javax.xml.*;
^
1 error
-----

Wieso gibt es dieses Paket nicht? Und wie kann ich es nachträglich hinzufügen?

Ich möchte eigentlich nur eine XML-Datei parsen, nicht mehr und nicht weniger.

Bitte helft mir!

Ach ja: Beim Kompilieren werden immer zwei Klassendateien erzeugt, und zwar folgende:

  • opened2kdb_reader$1.class
  • opened2kdb_reader.class
    Der Interpreter kann nur mit beiden arbeiten, nicht mit der einzelnen.
    Woran liegt das denn nun?
    <wunschdenken>Ich möchte gefälligst eine einzelne Datei!</wunschdenken>

Vielen Dank im Voraus!

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

--
Linux is like a wigwam - no windows, no gates and an Apache inside!
SELFCode: ss:| zu:) ls:< fo:# de:> va:} ch:? sh:) n4:( rl:? br:^ js:( ie:% fl:( mo:)
http://emmanuel.dammerer.at/selfcode.html
  1. Hallo Marc,

    marc@pcmr:/srv/www/htdocs> javac opened2kdb_reader.java
    opened2kdb_reader.java:2: package javax.xml does not exist
    import javax.xml.*;

    Welche Java-Version verwendest Du denn und warum vernwendest Du * beim Importieren, wenn das Paket nur eine Klassen enthält?

    Woran liegt das denn nun?

    Solche Dateien werden erzeugt, wenn Du anonyme, innere Klassen verwendest. Also etwas in der Art:

    new EventListener() {
      public void handleEvent(Event e) {
        ...
      }
    }

    <wunschdenken>Ich möchte gefälligst eine einzelne Datei!</wunschdenken>

    Verwende eine *.jar-Datei

    Grüße

    Daniel

    1. Hi!

      Welche Java-Version verwendest Du denn und warum vernwendest Du * beim Importieren, wenn das Paket nur eine Klassen enthält?

      ----snip----
      marc@pcmr:/srv/www/htdocs> java -version
      java version "1.4.2_03"
      Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)
      Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)
      marc@pcmr:/srv/www/htdocs>
      ----snap----

      Woran liegt das denn nun?
      Solche Dateien werden erzeugt, wenn Du anonyme, innere Klassen verwendest. Also etwas in der Art:

      new EventListener() {
        public void handleEvent(Event e) {
          ...
        }
      }

      Aha - ja, ich verwende einen WindowListener, der aktiviert wird wenn das Fenster geschlossen werden soll.

      <wunschdenken>Ich möchte gefälligst eine einzelne Datei!</wunschdenken>
      Verwende eine *.jar-Datei

      Wie kann ich jetzt konkret aus meinen beiden *.class-Dateien eine *.jar-Datei erzeugen?
      Oder am Besten: Direkt aus dem *.java-Code?

      Bis gleich

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

      --
      Linux is like a wigwam - no windows, no gates and an Apache inside!
      SELFCode: ss:| zu:) ls:< fo:# de:> va:} ch:? sh:) n4:( rl:? br:^ js:( ie:% fl:( mo:)
      http://emmanuel.dammerer.at/selfcode.html
      1. Hallo,

        ----snip----
        marc@pcmr:/srv/www/htdocs> java -version
        java version "1.4.2_03"
        Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_03-b02)
        Java HotSpot(TM) Client VM (build 1.4.2_03-b02, mixed mode)
        marc@pcmr:/srv/www/htdocs>
        ----snap----

        Da gibt es kein Package javax.xml. Aber es gibt folgende Packages:
         * javax.xml.parsers
         * javax.xml.transform
         * javax.xml.transform.dom
         * javax.xml.transform.sax
         * javax.xml.transform.stream

        Such dir das passende raus.

        Heißer Tipp: In die API-Doku schauen. Oder eine passende IDE installieren,
        die das Import-Geraffel für dich übernimmt.

        <wunschdenken>Ich möchte gefälligst eine einzelne Datei!</wunschdenken>
        Verwende eine *.jar-Datei

        Wie kann ich jetzt konkret aus meinen beiden *.class-Dateien eine *.jar-Datei erzeugen?

        Indem du sie inklusive der Verzeichnisstruktur zippst, und die ZIP-
        Datei nach "irgendwas.jar" umbenennst.

        Dann brauchst du noch ein Manifest im JAR.
        Optional könntest du auch das JAR-Tool verwenden, das sich vermutlich
        im bin-Verzeichnis deiner Java-Installation befindet. Google hilft
        hier.

        Oder am Besten: Direkt aus dem *.java-Code?

        Schrieb dir ein Skript. Oder nimm Ant. Oder eine IDE, die das kann.
        (Ich kenne keine, die das von Haus aus kann. Aber in den meisten
        kannst du deine Klassen in ein JAR "exportieren".)

        Gruß
        Slyh

        1. Hi!

          Da gibt es kein Package javax.xml. Aber es gibt folgende Packages:
          * javax.xml.parsers
          * javax.xml.transform
          * javax.xml.transform.dom
          * javax.xml.transform.sax
          * javax.xml.transform.stream

          Such dir das passende raus.

          Nun ja:

          ---snip---
          marc@pcmr:/srv/www/htdocs> javac opened2kdb_reader.java; java opened2kdb_reader
          opened2kdb_reader.java:2: package javax.xml does not exist
          import javax.xml.parsers;
                           ^
          1 error
          Exception in thread "main" java.lang.NoClassDefFoundError: opened2kdb_reader
          ---snap---

          Habe versucht:
          import java.xml.parsers;

          Wie kann ich jetzt konkret aus meinen beiden *.class-Dateien eine *.jar-Datei erzeugen?

          Indem du sie inklusive der Verzeichnisstruktur zippst, und die ZIP-
          Datei nach "irgendwas.jar" umbenennst.

          Dann brauchst du noch ein Manifest im JAR.

          Jau, sehr gut - schau ich mir morgen mal an.

          Optional könntest du auch das JAR-Tool verwenden, das sich vermutlich
          im bin-Verzeichnis deiner Java-Installation befindet. Google hilft
          hier.

          Guck ich auch nach...

          Oder am Besten: Direkt aus dem *.java-Code?

          Schrieb dir ein Skript. Oder nimm Ant. Oder eine IDE, die das kann.
          (Ich kenne keine, die das von Haus aus kann. Aber in den meisten
          kannst du deine Klassen in ein JAR "exportieren".)

          Jo - Shellskript ist hier auf jeden Fall sehr nützlich.
          Ant wurde von KDevelop vorausgesetzt, und da ich das nicht habe (Fehler beim Versuch des Parsens: ant nicht installiert) bin ich auf Textdatei und Konsolentools umgestiegen.
          Ist auch besser für mich zum Java lernen...

          cu

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

          --
          Linux is like a wigwam - no windows, no gates and an Apache inside!
          SELFCode: ss:| zu:) ls:< fo:# de:> va:} ch:? sh:) n4:( rl:? br:^ js:( ie:% fl:( mo:)
          http://emmanuel.dammerer.at/selfcode.html
          1. Hallo,

            Da gibt es kein Package javax.xml. Aber es gibt folgende Packages:
            * javax.xml.parsers
            * javax.xml.transform
            * javax.xml.transform.dom
            * javax.xml.transform.sax
            * javax.xml.transform.stream

            Such dir das passende raus.

            Nun ja:

            ---snip---
            marc@pcmr:/srv/www/htdocs> javac opened2kdb_reader.java; java opened2kdb_reader
            opened2kdb_reader.java:2: package javax.xml does not exist
            import javax.xml.parsers;

            Naja, da steht ja jetzt immer noch, daß das Package "javax.xml"
            nicht existiert, was auch defintiv richtig ist. *g*

            Der Name nach dem letzten Punkt bezeichnet eine Klasse. So wie du
            das jetzt gemacht hast, würdest du eine Klasse "parsers" im Package
            "javax.xml" einbinden wollen.

            (Statt einem Klassennamen kann man auch den Stern als Wildcard angeben.
            Das heißt dann nichts anderes, als daß alle Klassen des Packages
            importiert werden sollen.)

            Was du vermutlich willst, ist "import javax.xml.parsers.*".

            Wirf doch einfach einen Blick in die API-Doku, um zu sehen,
            was du wirklich brauchst.

            Noch ein kleiner Hinweis: Klassennamen werden in Java üblicherweise
            mit großem Anfangsbuchstaben geschrieben. Unterstriche werden nicht
            verwendet. Stattdessen wir jedes Wort, aus dem der Klassename zusammen-
            gesetzt ist, wieder mit großem Anfangsbuchstaben geschrieben.
            Ungefähr so: MeineCooleKlasse

            Dann kannst du nämlich auch unterscheiden, was ein Package-Name und
            was ein Klassenname ist.

            Optional könntest du auch das JAR-Tool verwenden, das sich vermutlich

            ^^^^^^^^
            Das sollte übrigens "Alternativ" heißen.

            Jo - Shellskript ist hier auf jeden Fall sehr nützlich.
            Ant wurde von KDevelop vorausgesetzt, und da ich das nicht habe (Fehler beim Versuch des Parsens: ant nicht installiert) bin ich auf Textdatei und Konsolentools umgestiegen.
            Ist auch besser für mich zum Java lernen...

            Meinungssache... :)

            Ich habe damals nur bei den ersten banalen Versuche ohne IDE gearbeitet.
            Wieso sollte man sich selbst geißeln? Schlimm genug, daß es noch immer
            Firmen gibt -- und ich nenne jetzt keine Namen -- bei denen praktisch
            ohne IDE entwickelt wird. Dabei läßt sich die Produktivität durch die
            Verwendung einer anständigen IDE meiner Meinung nach ganz locker um
            den Faktor 2-5 steigern...
            Von anständigen CVS-Tools möchte ich gar nicht erst anfangen...

            Gruß
            Slyh

            1. Hi!

              Naja, da steht ja jetzt immer noch, daß das Package "javax.xml"
              nicht existiert, was auch defintiv richtig ist. *g*

              Der Name nach dem letzten Punkt bezeichnet eine Klasse. So wie du
              das jetzt gemacht hast, würdest du eine Klasse "parsers" im Package
              "javax.xml" einbinden wollen.

              (Statt einem Klassennamen kann man auch den Stern als Wildcard angeben.
              Das heißt dann nichts anderes, als daß alle Klassen des Packages
              importiert werden sollen.)

              Was du vermutlich willst, ist "import javax.xml.parsers.*".

              Jaaa, das will ich! Und das hat auch geklappt... *Luftsprung*

              Wirf doch einfach einen Blick in die API-Doku, um zu sehen,
              was du wirklich brauchst.

              Ich hoffe dass ich damit jetzt meine XML-Datei einlesen und parsen kann. Mehr brauche ich gar nicht...

              Noch ein kleiner Hinweis: Klassennamen werden in Java üblicherweise
              mit großem Anfangsbuchstaben geschrieben. Unterstriche werden nicht
              verwendet. Stattdessen wir jedes Wort, aus dem der Klassename zusammen-
              gesetzt ist, wieder mit großem Anfangsbuchstaben geschrieben.
              Ungefähr so: MeineCooleKlasse

              Gemerkt: "DocumentBuilder"...

              Dann kannst du nämlich auch unterscheiden, was ein Package-Name und
              was ein Klassenname ist.

              Optional könntest du auch das JAR-Tool verwenden, das sich vermutlich
                    ^^^^^^^^
              Das sollte übrigens "Alternativ" heißen.

              Ahso, lieber mit den Standard-Tools erzeugen?

              Jo - Shellskript ist hier auf jeden Fall sehr nützlich.
              Ant wurde von KDevelop vorausgesetzt, und da ich das nicht habe (Fehler beim Versuch des Parsens: ant nicht installiert) bin ich auf Textdatei und Konsolentools umgestiegen.
              Ist auch besser für mich zum Java lernen...

              Meinungssache... :)

              Ich habe damals nur bei den ersten banalen Versuche ohne IDE gearbeitet.
              Wieso sollte man sich selbst geißeln? Schlimm genug, daß es noch immer
              Firmen gibt -- und ich nenne jetzt keine Namen -- bei denen praktisch
              ohne IDE entwickelt wird. Dabei läßt sich die Produktivität durch die
              Verwendung einer anständigen IDE meiner Meinung nach ganz locker um
              den Faktor 2-5 steigern...
              Von anständigen CVS-Tools möchte ich gar nicht erst anfangen...

              Ich wollte ja ursprünglich auch mit KDevelop anfangen, allerdings hat der mir beim Kompilieren den Fehler ausgegeben das Tool "ant" sei nicht installiert, und das braucht er ja.
              Also bin ich auf javac und java umgestiegen, und außerdem will ich nem Kumpel von mir (der Windows benutzt) einen guten Einstieg geben - da es die Tools für Linux und Windows gibt ist das optimal.

              cu

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

              --
              Linux is like a wigwam - no windows, no gates and an Apache inside!
              SELFCode: ss:| zu:) ls:< fo:# de:> va:} ch:? sh:) n4:( rl:? br:^ js:( ie:% fl:( mo:)
              http://emmanuel.dammerer.at/selfcode.html
              1. Hallo,

                Dann kannst du nämlich auch unterscheiden, was ein Package-Name und
                was ein Klassenname ist.

                Optional könntest du auch das JAR-Tool verwenden, das sich vermutlich
                      ^^^^^^^^
                Das sollte übrigens "Alternativ" heißen.

                Ahso, lieber mit den Standard-Tools erzeugen?

                Ich habe das JAR-Tool nie verwendet. Eclipse kann Projekte als JAR
                exportieren, und auch gleich das passende Manifest inkl. Main-Class-
                Angabe erzeugen. Mehr brauchte ich bisher nicht.
                (Übrigens macht das Tool auch nicht viel mehr.)

                Ich wollte ja ursprünglich auch mit KDevelop anfangen, allerdings hat der mir beim Kompilieren den Fehler ausgegeben das Tool "ant" sei nicht installiert, und das braucht er ja.

                Nimm Eclipse oder Netbeans.

                Also bin ich auf javac und java umgestiegen, und außerdem will ich nem Kumpel von mir (der Windows benutzt) einen guten Einstieg geben - da es die Tools für Linux und Windows gibt ist das optimal.

                Welche Tools? javac?
                Eclipse und Netbeans gibt es auch für alle relevanten Betriebssysteme.

                Gruß
                Slyh

                1. Hi!

                  Also bin ich auf javac und java umgestiegen, und außerdem will ich nem Kumpel von mir (der Windows benutzt) einen guten Einstieg geben - da es die Tools für Linux und Windows gibt ist das optimal.

                  Welche Tools? javac?
                  Eclipse und Netbeans gibt es auch für alle relevanten Betriebssysteme.

                  Jo, habe mir am Samstag das Buch "Java ist auch eine Insel" gekauft, und die verwenden Eclipse auch - es muss wohl sehr gut sein, ich werde es demnächst austesten.
                  Und da es selbst in Java geschrieben ist ist auch super für meinen Kumpel, und dass es JAR-Dateien erstellen kann geradezu ideal... :-D

                  Dankeschön!

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

                  --
                  Linux is like a wigwam - no windows, no gates and an Apache inside!
                  SELFCode: ss:| zu:) ls:< fo:# de:> va:} ch:? sh:) n4:( rl:? br:^ js:( ie:% fl:( mo:)
                  http://emmanuel.dammerer.at/selfcode.html