Gerd: Paket nachliefern

Hallo,

ich habe in Ecpilse mit java ein Programm geschrieben. Unter Eclipse oder mit Eclipse erstellt als Jarfile unter windows funktioniert es.

es soll jetzt aber auf einem anderen rechner/server laufen mit solaris. dieser hat wohl eine ältere java-version und kennt java.net.* nicht.

habe ich irgendeine möglichkeit das nachzuliefern bzw. in welchem jar-file ist das überhaupt vorhanden? wenn ich das wüßte, was komischerweise nirgends steht könnte ich es ja als externes jar mit einbinden in mein jarfile und so wäre es ja dann auf einem anderen system auch lauffähig.

find ich sowieso doof das net alle jars und klassen mit in ein jar-flie aufgenommen werden die man benutzt hat da man ja nie weiss ob sie auf dem einzusetzenden system auch vorhanden sind.

wie gesagt mir wäre schon geholfen wenn ich wüßte in welchem jar-file sich java.net befindet und wo ich es noch mal gegebennenfalls downloaden kann.

vielen dank schon im voraus...

Gerd

  1. find ich sowieso doof das net alle jars und klassen mit in ein jar-flie aufgenommen werden die man benutzt hat da man ja nie weiss ob sie auf dem einzusetzenden system auch vorhanden sind.

    Wie Du Deine Auslieferung zusammenbaust, steht Dir doch frei. Du kannst doch explizit angeben, daß bestimmte Packages/Libs etc. mit ins JAR gepackt werden.

    1. Ja, nur müßte ich dazu wissen in welchem jar-file sich das java.net.* paket befindet, aber das weiss ich ja leider nicht mehr und nirgends steht da was drüber...

      Gerd

      1. Hallo,

        Ja, nur müßte ich dazu wissen in welchem jar-file sich das java.net.* paket befindet, aber das weiss ich ja leider nicht mehr und nirgends steht da was drüber...

        In Eclipse:
        Ctrl+Shift+T -> "URL" eintippen -> Enter drücken -> Im Package Explorer
        schauen unter welchem JAR die Klasse java.net.URL liegt.

        Das war jetzt leicht.
        (Ggf. mußt du im Package Explorer oben das "Link with Editor" aktivieren.)

        Da die Klasse im rt.jar liegt, in dem eigentlich fast alles liegt, wird
        es schwierig, dieses einzeln auszuliefern.
        Bedenke außerdem, daß auch die java.net-Klassen von anderen Klassen, die
        es erst in neueren Java-Versionen gibt, abhängig sein können.

        Ganz davon abgesehen, gibt es das java.net-Package bereits seit der
        ersten Java-Version. Es sind höchstens einzelne Klassen in neueren
        Java-Versionen hinzugekommen.

        In der Newsgroup de.comp.lang.java gab es erst kürzlich eine Diskussion
        über das Ausliefern von Klassen aus neueren JDKs. Es ist wohl so, daß
        dies in älteren Version verboten, in neueren aber erlaubt ist. Schau
        aber am besten mal in der Newsgroup nach oder suche passende Dokumente
        bei Sun.

        Gruß
        Slyh

        1. Danke für den Tip.

          Ganz davon abgesehen, gibt es das java.net-Package bereits seit der
          ersten Java-Version. Es sind höchstens einzelne Klassen in neueren
          Java-Versionen hinzugekommen.

          Das dachte ich ja auch, aber auf einem anderen Rechner kam die Fehlermeldung in der Richtung, das er ...URISyntaxException nicht finden kann.

          Gerd

          1. Hallo,

            Das dachte ich ja auch, aber auf einem anderen Rechner kam die Fehlermeldung in der Richtung, das er ...URISyntaxException nicht finden kann.

            Ja. Die Klasse java.net.URI gibt's ja auch erst seit Java 1.4.
            Du solltest dir das JDK deiner Zielplattform installieren, in Eclipe
            einrichten und dann in den Projekt-Einstellungen eintragen, daß er
            dieses JDK verwenden soll. Dann siehst du schnell, was nicht (mehr)
            geht...

            Hier ist der Google-Thread. Ich weiß aber nicht, ob er dir hilft...

            Gruß
            Slyh

            1. Ok, danke für die Tips.

              Werde mich jetzt damit mal auseinander setzen.

              Gerd

              1. Ich habe jetzt auf dem Unix-System Java 1.4 installiert und mein Programm getest. UNter Windows wie gesagt überhaupt keine Probs, aberunter Unix auf einmal folgendes:

                Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using '194.138.122.205:0.0:0.0' as the value of the DISPLAY variable.
                        at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
                        at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:134)
                        at java.lang.Class.forName0(Native Method)
                        at java.lang.Class.forName(Class.java:141)
                        at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:62)
                        at sun.awt.motif.MToolkit.<clinit>(MToolkit.java:81)
                        at java.lang.Class.forName0(Native Method)
                        at java.lang.Class.forName(Class.java:141)
                        at java.awt.Toolkit$2.run(Toolkit.java:748)
                        at java.security.AccessController.doPrivileged(Native Method)
                        at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:739)
                        at java.awt.Toolkit.getEventQueue(Toolkit.java:1519)
                        at java.awt.EventQueue.isDispatchThread(EventQueue.java:651)
                        at javax.swing.SwingUtilities.isEventDispatchThread(SwingUtilities.java:1238)
                        at javax.swing.text.StyleContext.reclaim(StyleContext.java:419)
                        at javax.swing.text.StyleContext.addAttribute(StyleContext.java:276)
                        at javax.swing.text.html.StyleSheet.addAttribute(StyleSheet.java:538)
                        at javax.swing.text.StyleContext$NamedStyle.addAttribute(StyleContext.java:1468)
                        at javax.swing.text.StyleContext$NamedStyle.setName(StyleContext.java:1278)
                        at javax.swing.text.StyleContext$NamedStyle.<init>(StyleContext.java:1226)
                        at javax.swing.text.StyleContext.addStyle(StyleContext.java:88)
                        at javax.swing.text.StyleContext.<init>(StyleContext.java:68)
                        at javax.swing.text.html.StyleSheet.<init>(StyleSheet.java:147)
                        at javax.swing.text.html.HTMLDocument.<init>(HTMLDocument.java:82)
                        at pkgrepairbuild.ProblemReportScanner$1.<init>(ProblemReportScanner.java:79)
                        at pkgrepairbuild.ProblemReportScanner.getText(ProblemReportScanner.java:79)
                        at pkgrepairbuild.ProblemReportScanner.<init>(ProblemReportScanner.java:45)
                        at pkgrepairbuild.RepairBuild.main(RepairBuild.java:212)

                Aber was will der mit X11 Window? Mein Programm gibt nur Text aus. Kann mir einer sagen was diese ellenlange Meldung eigentlich aussagt?

                Grüße
                Gerd

                1. Hallo,

                  Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using '194.138.122.205:0.0:0.0' as the value of the DISPLAY variable.

                  Ohje...

                  [...]

                  javax.swing.text.StyleContext.<init>(StyleContext.java:68)
                          at javax.swing.text.html.StyleSheet.<init>(StyleSheet.java:147)
                          at javax.swing.text.html.HTMLDocument.<init>(HTMLDocument.java:82)
                          at pkgrepairbuild.ProblemReportScanner$1.<init>(ProblemReportScanner.java:79)
                          at pkgrepairbuild.ProblemReportScanner.getText(ProblemReportScanner.java:79)
                          at pkgrepairbuild.ProblemReportScanner.<init>(ProblemReportScanner.java:45)
                          at pkgrepairbuild.RepairBuild.main(RepairBuild.java:212)

                  Aber was will der mit X11 Window? Mein Programm gibt nur Text aus. Kann mir einer sagen was diese ellenlange Meldung eigentlich aussagt?

                  Dich interessieren eher die unteren Zeilen und die eigentliche Exception.
                  HTMLDocument, das du wohl zum Parsen von HTML verwenden möchtest, ist
                  ja eigentlich eine Swing-Klasse. Offensichtlich haben die Entwickler
                  es zu gut gemeint, und setzen gleich beim Instanzieren der Klasse ein
                  funktionierendes Windowing-System voraus, was du auf deinem Server
                  aber wohl nicht hast oder nicht eingerichtet hast.

                  Ein ziemlich bekanntes, und deshalb umso nervigeres Problem. Eine kurze
                  Abhandlung zu der Problematik findest du bei jGuru.
                  Viel tun kannst du wohl nicht. Probier mal die im Artikel vorgeschlagenen
                  Ansätze. Wenn das nichts hilft, bleibt dir wohl nur, auf die Klasse
                  HTMLDocument zum Parsen von HTML-Dateien zu verzichten.

                  (Eine einfache Möglichkeit HTMLDocument zu instanzieren, ohne daß auf
                  AWT/Swing-Zeugs zugegriffen wird, konnte ich auf die Schnelle nicht
                  finden. Aber vielleicht kannst du bei Google dazu selbst was finden...)

                  Gruß
                  Slyh

                  1. Hallo Slyh,

                    hm, sowas in die Richtung habe ich mir dann auch mit der Zeit gedacht, aber noch keine Lösung gefunden. Eventuell müßte ich die DISPLAY-Variable irgendwie neu defieren und export'en das die Umleitung stimmt. Da kommt mir aber trotzdem die Frage was sich java bei der Programmierung dieser Klassen gedacht hat.

                    Werde da jetzt jGuru wie von dir empfohlen mal durcharbeiten. Vielleicht find ich ja dort doer irgend wo anders einen besseren Lösungansatz oder Mehtoden bzw. Befehle wie ich das umgehen kann.

                    Grüße

                    Gerd

  2. Hallo Gerd,

    java.net.* gibt es seit Java 1.0, bist Du sicher, dass Du ältere Versionen unterstüzen willst? ;-)

    Javaprogramme auf älteren JREs laufen zu lassen ist nicht so einfach. Vieles von dem, was unter java.* liegt, ist nicht direkt in Java implementiert und erfordert bestimmte Schnittstellen der VM. Damit ist das gar nicht mehr möglich diese grundlegenden Bibliotheken mit auszuliefern.

    Überlege Dir vorher, welche Java-Version Du voraussetzen willst und entwickle für diese Version.
    Da Du Dich jetzt schon festgelegt hast, schreibst Du eben diese Version vor, wenn das irgendwie möglich ist.

    Grüße

    Daniel