| « Gerichtete Graphen mit yEd | Tutorial: Access-Datenbank-Zugriff mit Java programmieren » |
Tutorial: JavaHelp erzeugen und in Java-Applikationen einbinden
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:
- einen XML-Editor, z.B. den von XMLmind oder auch XMLSpy. (Ich ziehe für diesen Zweck den ersteren vor)
- das Docbook Publishing Framework DobuDish, am besten die Version mit JRE - spart Zeit für umständliche Konfigurationen.
- eine XML-Vorlage (folgt unten)
- 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
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
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. :-)
war mir wirklich eine riesenhilfe!
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.
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. 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
Meine JavaHilfe habe ich mit dem HELPSETMAKER erstellt. Eine wirklich einfache und schnelle Lösung.
http://www.cantamen.com/helpsetmaker.php
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..
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.
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!
Lg,
Ryan