Paket nachliefern
Gerd
- java
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
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.
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
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
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
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
Ok, danke für die Tips.
Werde mich jetzt damit mal auseinander setzen.
Gerd
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
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
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
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