Homepage von Jean-René Thies — Projekte & Tools rund um Java, Groovy, Grails, PHP, Scala, MySQL...
    « Gerichtete Graphen mit yEdTutorial: Access-Datenbank-Zugriff mit Java programmieren »

    Tutorial: JavaHelp erzeugen und in Java-Applikationen einbinden

    Permalink 14.12.06 22:22, von jrt, Kategorien: Project Plaza, Java, Tools , Schlagworte: javahelp

    Mit dem JavaHelp System kann man seine Java-Programme mit einer navigier- und durchsuchbaren Hilfe ausstatten - im Prinzip jedenfalls. Ganz so einfach ist es leider nicht, daher soll hier eine Methode vorgestellt werden, um dieses Ziel mit verhältnismäßig geringem Aufwand zu erreichen.

    Fortsetzung:


    Was man braucht:

    1. einen XML-Editor, z.B. den von XMLmind oder auch XMLSpy. (Ich ziehe für diesen Zweck den ersteren vor)
    2. das Docbook Publishing Framework DobuDish, am besten die Version mit JRE - spart Zeit für umständliche Konfigurationen.
    3. eine XML-Vorlage (folgt unten)
    4. ca. 15 Zeilen Java-Code (folgt auch).

    Kurz zu den eingesetzten Tools:
    Das DocBook Publishing System (kurz: Dopus) erzeugt aus XML-Dateien nach DocBook-Standard wahlweise die Formate HTML, CHM, PDF oder eben JavaHelp (als JAR). Und das geht sehr einfach! Um eine ordentliche DocBook-Datei zu schreiben, sollte man einen komfortablen Editor einsetzen. Meine Empfehlung hier: der XMLmind XML Editor (kurz XXE, siehe auch engl. Artikel bei XML.com) - aber jeder andere tut es auch.
    XXE hat den Vorteil, dass DocBook-Vorlagen schon enthalten sind. Außerdem blendet die Oberfläche alle Tags aus, dadurch kann man sich besser auf den Inhalt konzentrieren.

    Und so geht's:
    Dopus bekommt man als ZIP, das nur entpackt werden muss. Ein kurzes Handbuch und eine ausführliche DocBook-Doku sind mit dabei.
    Dopus wird über eine einzige Batchdatei gesteuert, die man per Befehlszeile mit Parametern aufruft. Man beginnt sinnvollerweise mit der Erzeugung eines neuen "Buchs", indem man im Programmverzeichnis (z.B. C:\Programme\dopus) den Befehl
    generator.bat MeineHilfe create book
    eingibt. Statt MeineHilfe kann natürlich jeder andere sinnvolle Titel verwendet werden.
    Dopus erzeugt nun ein Unterverzeichnis "documents", darin ein Projektverzeichnis "MeineHilfe" und darin ein Arbeitsverzeichnis "input" mit zwei beispielhaften XML-Dateien. Die ersetzen wir später noch durch eine eigene! Mit einem weiteren Befehl
    generator.bat MeineHilfe javahelp
    entsteht ein "output"-Verzeichnis, und dort finden wir unter "javahelp" drei Dateien. Eine davon heißt "MeineHilfe.jar" und kann direkt gestartet werden:

    Voilà - wir haben soeben eine voll funktionsfähige Hilfe im JavaHelp-Format erzeugt!
    Inhaltlich gibt es da natürlich noch einiges zu tun, schauen wir uns aber zunächst die Integration in eine Java Desktop-Applikation an.
    Die drei JAR-Dateien MeineHilfe.jar, hsviewer.jar und jh.jar müssen zunächst als Libraries in die Applikation eingebunden werden. Anschließend erstellt man in der Frame-Klasse, aus der heraus die Hilfe gestartet wird, eine Methode mit folgendem Inhalt:

    Code:

    JHelp helpViewer = null;
    try {
    //Hauptfenster in der nächsten Zeile ersetzen durch aktuellen Klassennamen
          ClassLoader cl = Hauptfenster.class.getClassLoader();
          URL url = HelpSet.findHelpSet(cl, "jhelpset.hs");
          helpViewer = new JHelp(new HelpSet(cl, url));
          // Darzustellendes Kapitel festlegen, ID muss im XML existieren!
          helpViewer.setCurrentID("Simple.Introduction");
    } catch (Exception e) {
          System.err.println("API Help Set not found");
    }
            
    JFrame frame = new JFrame();
    frame.setTitle("Hilfe zu (hier Dein Programmname)");
    frame.setSize(800,600);
    frame.getContentPane().add(helpViewer);
    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    frame.setVisible(true);

    In Zeile 4 muss "Hauptfenster" durch den Namen der Klasse ersetzt werden. In Zeile 13 legt man der Titel des Hilfe-Frames fest, darunter die Abmessungen.
    Damit das funktioniert, braucht man in der aufrufenden Klasse noch folgende Importe:

    Code:

    import java.net.URL;
    import javax.help.HelpSet;
    import javax.help.JHelp;

    Wenn man nun einen Menübefehl "Hilfe" mit ActionListener ausstattet und den oben gezeigten Code damit startet, sollte die Hilfe eingebaut und funktionsfähig sein.
    So weit so gut, nun können wir uns dem Inhalt der Hilfe widmen. (weiter)

    Seiten: 1 · 2

    12 Kommentare »

    12 Kommentare

    Kommentar von: delight [Besucher] E-Mail
    1) qandaset ist erst in http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd
    definiert ...


    2) es wird auf 3 jars verwiesen die einzubinden sind. Es wäre doch schön würden sie im Text auch bennant werden ;)

    ansonsten ein sehr schöne Beitrag
    31.12.06 @ 15:27
    Kommentar von: Balian [Besucher] E-Mail
    Also erstmal danke für dieses tolle Tutorial zu JHelp. Endlich konnte ich mal eine vernünftige Hilfe erstellen. Und das in einer angemessenen Zeit. Es wäre super, wenn Du auch noch zeigen könntest, wie man vom Javaprogramm direkt auf eine bestimmte Seite der Javahilfe springt. Das wäre Spitze.

    Ich muss allerdings noch schauen, warum er mir beim Aufrufen der Hilfe eine "javax.help.BadIDException: Not valid ID: Simple.Introduction" Exception wirft. Weiß noch nicht, was die ID tut. :-)
    08.02.07 @ 20:10
    Kommentar von: joe [Besucher] E-Mail · http://www.bastarde.at
    danke für das super tutorial in deutsch :)
    war mir wirklich eine riesenhilfe!
    12.06.07 @ 12:04
    Kommentar von: Eve [Besucher] E-Mail
    Hi!
    Mich würde mal in diesem Zusammenhang interessieren, ob du auch weißt, wie man bei JavaHelp im Index dieses Suchfenster ausblenden kann. Das macht nämlich nur Probleme.
    Weißt du dazu was genaues? ich hab mich schon tot gesucht.
    20.06.07 @ 14:18
    Kommentar von: jrt [Mitglied] E-Mail
    Auf die Schnelle habe ich das hier gefunden, um den Tab für die Indexsuche aus der JavaHilfe zu entfernen:
    Enumeration eNavigators = helpViewer.getHelpNavigators();
    while (eNavigators.hasMoreElements()){
       JHelpNavigator nav = (JHelpNavigator)eNavigators.nextElement();
       if(nav instanceof JHelpIndexNavigator){
          helpViewer.removeHelpNavigator(nav);
       }
    }
    Vielleicht geht's auch kürzer. Du kannst statt JHelpIndexNavigator auch JHelpSearchNavigator oder JHelpTOCNavigator ausblenden. Einfach in der if-Zeile ändern.
    21.06.07 @ 21:05
    Kommentar von: Dennis [Besucher] E-Mail
    Also ich finde das Tutorial sehr gut!!!
    Allerdings hätte ich 2 Fragen
    1. Wie kann ich die Bilder ändern, dass nicht mehr die Orner angezeigt werden
    2. Das Menü oben wird bei mir nicht angezeigt sobald es in meiner java app läuft
    07.07.07 @ 19:24
    Kommentar von: Knatta [Besucher] E-Mail
    Vielen Dank für diese Hilfe. Ich konnte es ohne Probleme einbinden.

    Meine JavaHilfe habe ich mit dem HELPSETMAKER erstellt. Eine wirklich einfache und schnelle Lösung.

    http://www.cantamen.com/helpsetmaker.php
    26.09.07 @ 09:48
    Kommentar von: selma [Besucher] E-Mail
    Hallo,
    erstmal wollte ich mich für die gute Hilfe auf deiner Seite bedanken...

    ich habe nun Javahelp eingebaut, nur habe ich ein problem..

    und zwar mach ich jetzt ein Projekt und das porjekt soll insgesamt 3 verschiedene hilfen haben.
    Nur ist das Problem jetzt, egal wie ich mein programm aufrufen tue, dass er immer das gleiche helpset ausrufen tut.
    ich glaube es liegt an den helpset

    gibt es da eine möglichkeit die helpsets anders zu benennen oder wie geht das

    oder liegt das problem ganz woanders


    für eine schnelle antwort wäre ich sehr dankbar..


    danke im vorraus..
    08.02.08 @ 15:57
    Kommentar von: jrt [Mitglied] E-Mail
    Zur Frage von Selma:

    Hier die schnellste Möglichkeit:
    - Hole Dir das kostenlose Programm TUGZip (http://www.tugzip.com/)
    - Öffne damit die JAR-Datei, deren Name Du selbst festgelegt hast.
    - Benenne die Datei jhelpset.hs um.
    - JAR schließen und sichern.

    Jetzt kannst Du im Programmauszug aus meinem Tutorial (Zeile 5) die umbenannte Datei eingeben. Ersetze einfach jhelpset.hs durch den neuen Namen.
    URL url = HelpSet.findHelpSet(cl, "jhelpset.hs");

    Ein anderes helpset bekommt dann natürlich einen anderen Namen, und dieses findet das Programm dann eben über eine neue URL-Definition.
    08.02.08 @ 19:52
    Kommentar von: Peter [Besucher] E-Mail
    Hallo!

    Dein Tutorial ist super und hat mir extrem weitre geholfen.

    Ich würde gern die Größe der Frames beim Start der JavaHelp festlegen, d.h. das das Inhaltsverzeichnis zum Beispiel nur 25% Prozent der Gesamtgröße annimmt und der Rest für die eigentlichen Hilfeinfos verwendet wird.
    Ist das möglich? Wenn Ja wo (in der Helpset-Datei???)

    Vielen Dank!
    20.02.08 @ 07:26
    Kommentar von: Frank [Besucher]
    Vielen Dank für das klasse Tutorial, das mir sehr weitergeholfen hat.
    10.06.09 @ 11:32
    Kommentar von: Ryan [Besucher]
    Tolles Tutorial! Wirklich! Danke! Hat mir sehr geholfen! Mehr davon.

    Lg,

    Ryan
    19.01.10 @ 00:49

    Einen Kommentar hinterlassen


    Ihre E-Mail-Adresse wird nicht auf dieser Seite angezeigt.

    Ihr URL wird angezeigt.
    (Zeilenumbrüche werden zu <br />)
    (Name, E-Mail-Adresse & Webseite)
    (Benutzern erlauben, Sie durch ein Kontaktformular zu kontaktieren (Ihre E-Mail-Adresse wird nicht weitergegeben))
    mehr...

    powered by b2evolution

    ©2010 by Jean-René Thies

    Kontakt |