+ Antworten
Ergebnis 1 bis 12 von 12

Thema: HTML-Datei aus einer Jar-Datei im Browser öffnen

  1. #1
    Two Of Three Megabyte Themenstarter
    Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.275
    Genannt
    101 Post(s)
    Moin,

    ich habe eine Webseite, die innerhalb einer Jar-Datei abgelegt ist und möchte diese im Standard-Browser öffnen.
    So lange die Datei auf dem System direkt greifbar ist, funktioniert das tadellos mit Hilfe der Klasse Desktop. Keine Idee habe ich allerdings für den Fall, wenn die Webseite innerhalb einer Jar-Datei liegt.

    Habt ihr da eine Idee?
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  2. #2
    User int
    Registriert seit
    21.07.2015
    Fachbeiträge
    55
    Genannt
    2 Post(s)
    Hast du es mit dem File protocol ausprobiert? Also "file://pfad_zur_jar.jar!/pfad_zur_html_datei.html"

    Sent from my D5803 using Tapatalk

  3. #3
    Two Of Three Megabyte Themenstarter
    Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.275
    Genannt
    101 Post(s)
    Ja, in verschiedenen Variationen.

    Problem 1: Ich muss wohl den absoluten Pfad angeben? Das ist immer Mist, weil ich nicht weiß, wohin der Benutzer das Programm kopiert.

    Problem 2: Wenn im Pfad ein Leerzeichen ist, gibt es einen Fehler, der darauf hinweist, dass sich an Position x ein ungültiges Zeichen im Pfad befindet.

    Problem 3: Wenn ich den Pfad mit gültigen Zeichen ausstatte, bekomme ich Fehlermeldungen, die so, oder so ähnlich aussehen:
    Code:
    URI:jar:file://home/l-ectron-x/java/MyJar.jar!/de/domain/package/help.html
    Die help.html liegt im Verzeichnis der Klasse, die den Aufruf desk.browse(uri); startet, also im gleichen Verzeichnis.
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  4. #4
    User int
    Registriert seit
    21.07.2015
    Fachbeiträge
    55
    Genannt
    2 Post(s)
    Ungültige Zeichen kannst du ja mit URLDecoder oder wie die klasse hieß, umwandeln. Damit hast du wenigstens ein Problem weniger. Aber da Problem #3 vorhanden ist, ändert das nicht viel. Keine Möglichkeit, die Datei in Temp zu entpacken?

    Sent from my D5803 using Tapatalk

  5. #5
    Two Of Three Megabyte Themenstarter
    Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.275
    Genannt
    101 Post(s)
    Ja, doch. Das versuche ich gerade.
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  6. #6
    User Kilobyte
    Registriert seit
    25.09.2008
    Fachbeiträge
    242
    Genannt
    15 Post(s)
    Also ich glaube nicht, dass das direkt geht, da der Browser nicht wirklich weiß, wie er Resourcen in einem Jar findet.

    wenn das mit TEMP-folder/file nicht gewuenscht ist, koenntest du naturelich auch einen kleinen Webserver starten, der die Datei ausliefert und der Browser muss dann nur localhost:irgendeinport/help.html aufrufen.

  7. #7
    User int
    Registriert seit
    21.07.2015
    Fachbeiträge
    55
    Genannt
    2 Post(s)
    Zitat Zitat von AmunRa Beitrag anzeigen
    Also ich glaube nicht, dass das direkt geht, da der Browser nicht wirklich weiß, wie er Resourcen in einem Jar findet.

    wenn das mit TEMP-folder/file nicht gewuenscht ist, koenntest du naturelich auch einen kleinen Webserver starten, der die Datei ausliefert und der Browser muss dann nur localhost:irgendeinport/help.html aufrufen.
    Stimmt, das jar protocol ist ja nur in Java drin, hab ich vergessen

    Sent from my D5803 using Tapatalk

  8. #8
    Two Of Three Megabyte Themenstarter
    Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.275
    Genannt
    101 Post(s)
    @AmunRa , gute Idee. Ich habe keine Ahnung, ob das Programm mal auf einem System zum Einsatz kommt, das in dieser Hinsicht Restriktionen unterliegt.

    Ich habe daher den Vorschlag von @PositiveDown umgesetzt. Ich denke, eine temporäre Datei kann man auf jedem System schreiben?
    Meine funktionierende Lösung in Form einer Methode sieht nun so aus:
    Java Code:
    1.     public void help() {
    2.         if (Desktop.isDesktopSupported()) {
    3.             File temp = null;
    4.             try {
    5.                 temp = File.createTempFile("help", ".html");  //temporäre Datei im Standard-Temp-Verzeichnis erzeugen
    6.                 temp.deleteOnExit(); //löschen, wenn Programm beendet wird
    7.  
    8.                 //Datei aus Jar-Datei einlesen
    9.                 //-relativer Pfad mit getClass().getResourceAsStream(...) für Stream funktioniert offenbar nicht
    10.                 //-Angabe einer Klasse aus dem Verzeichnis der html-Datei funktioniert
    11.                 Scanner scan = new Scanner(MainController.class.getResourceAsStream("help.html"));
    12.                 StringBuilder content = new StringBuilder();
    13.                 while (scan.hasNextLine()) {
    14.                     content.append(scan.nextLine()).append("\n");
    15.                 }
    16.  
    17.                 //Dateiinhalt in temporäre Datei kopieren/schreiben
    18.                 Files.write(Paths.get(temp.getAbsolutePath()), content.toString().getBytes());
    19.             } catch (IOException ex) {
    20.                 System.err.out(ex);
    21.                 JOptionPane.showMessageDialog(this, "Fehler beim Erzeugen der Hilfedatei!\nDie Hilfedatei kann daher nicht angezeigt werden.", "java.io.IOException", JOptionPane.ERROR_MESSAGE);
    22.                 return;
    23.             }
    24.  
    25.             try {
    26.                 //temporäre Datei im Webbrowser anzeigen
    27.                 Desktop desk = Desktop.getDesktop();
    28.                 desk.browse(temp.toURI());
    29.             } catch (IOException ex) {
    30.                 System.err.out(ex);
    31.                 JOptionPane.showMessageDialog(this, "Fehler bei der Ausgabe der Hilfedatei im Webbrowser!", "java.io.IOException", JOptionPane.ERROR_MESSAGE);
    32.             }
    33.         }
    34.     }

    Probleme gab es mit getClass().getResourceAsStream("../help.html"). Wenn die HTML-Datei in einem anderen Verzeichnis als die einbindende Klasse liegt, wird eine NullPointerException geworfen.
    Ich wollte die Datei aber gerne etwas zentraler ablegen. Mit Angabe einer Klasse (die auch in der einbindenden Klasse referenziert wird) aus dem Verzeichnis der HTML-Datei hat das aber funktioniert.
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  9. #9
    User Kilobyte
    Registriert seit
    25.09.2008
    Fachbeiträge
    242
    Genannt
    15 Post(s)
    Leg die Resource ins root-Verzeichnis, dann geht getClass().getResourceAsStream("/help.html"), wenn du es in ein package legen moechtest z.B. de.test
    dann eben getClass().getResourceAsStream("/de/test/help.html"), dann hast du nie ein Problem und kannst die Resouce von jeder Klasse aus laden.
    Geändert von AmunRa (12.02.2017 um 18:51 Uhr)

  10. Es bedanken sich:
    L-ectron-X (12.02.2017)
  11. #10
    Two Of Three Megabyte Themenstarter
    Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.275
    Genannt
    101 Post(s)
    Zitat Zitat von AmunRa Beitrag anzeigen
    getClass().getResourceAsStream("/de/test/help.html")
    Danke @AmunRa , genau das war das Problem. Ich hatte den ersten Slash jedesmal nicht drin. Habe mich gewundert, weil ich es bisher auch anders kannte.
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

  12. #11
    User Kilobyte
    Registriert seit
    13.10.2015
    Fachbeiträge
    175
    Genannt
    19 Post(s)
    Möchte noch ergänzen
    https://docs.oracle.com/javase/7/doc...ile.CopyOption...)

    Damit kann man sich Scanner und StringBuilder ersparen. File hat in Java7 noch eine toPath-Methode bekommen, die sehr nützlich ist.

    Files.copy(getClass().getResourceAsStream("/help.html"), temp.toPath());

    Lesbarer oder?

  13. Es bedanken sich:
    L-ectron-X (12.02.2017)
  14. #12
    Two Of Three Megabyte Themenstarter
    Avatar von L-ectron-X
    Registriert seit
    16.07.2006
    Ort
    Drebkau
    Fachbeiträge
    2.275
    Genannt
    101 Post(s)
    Prima. Schaue ich mir an und tausche ggf. aus.

    *** Edit ***

    Vielleicht aber auch nicht. Denn ich hatte gerade den Gedanken, dass man ja vor dem Kopieren/Schreiben der temporären Datei noch einige Platzhalter in der HTML-Datei mit Daten füllen (austauschen) könnte. Bspw. Titel, Version etc. pp.
    Schöne Grüße
    L-ectron-X

    Byte-Welt - Wir sind die Community, in der die Benutzer sagen, wohin wir uns entwickeln.
    Programmieren lernt man nur durch Programmieren.

    "Wenn man die Buchstaben von Bundeskanzlerin umstellt, kommt Bankzinsenluder raus..."

+ Antworten Thema als "gelöst" markieren

Direkt antworten Direkt antworten

Gib folgenden Captcha-Code ein: 2X9MD4

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. (Android) Einlesen einer Datei
    Von Android Neuling im Forum Android
    Antworten: 4
    Letzter Beitrag: 30.10.2013, 11:32
  2. (Swing) Datei öffnen per Mausklick im FileManager
    Von Fred12 im Forum AWT, Swing, JavaFX & SWT
    Antworten: 1
    Letzter Beitrag: 15.09.2013, 19:19
  3. Änderungen einer Datei festellen
    Von IpsumJ im Forum Allgemeine Themen
    Antworten: 13
    Letzter Beitrag: 23.08.2013, 16:08
  4. Antworten: 9
    Letzter Beitrag: 11.08.2012, 01:03
  5. .class-Datei innerhalb einer .jar-Datei verändern
    Von DerTo im Forum Java-Grundlagen
    Antworten: 1
    Letzter Beitrag: 23.05.2009, 16:09

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •