Rechercher : dans
Par :

[JAVA] Librairie HelpGUI

Dernière réponse le 4 déc 2007 à 02:25:43 Posotaz, le 3 déc 2007 à 00:43:50 
 Signaler ce message aux modérateurs

Bien le salut,

Plutôt que de programmer ça moi-même je me suis dit que ce serait bien de chercher s'il existait déjà une librairie Java pour afficher une fenêtre d'aide avec une TOC et où les fichiers de contenu seraient écrits en HTML.

Je l'ai trouvée, elle s'appelle HelpGUI (http://helpgui.sourceforge.net).

La démo fonctionne super mais si je télécharge le JAR et que je l'inclus à mon projet, je n'arrive pas à lui faire repérer mon dossier où se trouvent les fichiers toc.xml ainsi que les fichiers HTML. Je développe avec Eclipse et mon projet se constitue comme suit :

Dossier projet
	src
		mon package (view)
			Ma classe amorçe
			Eventuellement une autre classe
		un autre package
			Une classe
			Encore une autre classe
		...
	dossier des fichiers d'aide (htmlhelpfiles)
		toc.xml
		home.htm
		style.css
		...
	lib
		helpgui-1.1.jar

C'est donc directement sur le jar contenu dans mon dissier lib que j'ai fait le lien dans mon projet et en cochant ce jar. En fait la lien vers la librairie semble être effectué correctement puisqu'il ne met pas d'erreurs à ce niveau là.

Mon fichier toc.xml contient :
<?xml version="1.0" encoding="ISO-8859-1" ?>
<toc>
  <tocitem text="General">
    <tocitem text="Introduction"       target="home.htm" home="true"/>
  </tocitem>
</toc>

Ma classe amorçe contient ceci :
package view;

import javax.swing.JFrame;

import net.sourceforge.helpgui.gui.MainFrame;

public class HTMLHelpViewer /*extends JFrame*/ {
	
	public static void main(String[] args) {
		JFrame helpFrame = new MainFrame("./htmlhelpfiles", "plastic");
		File file = new File("./htmlhelpfiles");
		if(file.exists() && file.isDirectory()) {
			System.out.println("Le chemin est bon");
		}
		helpFrame.setVisible(true);
	}
	
}

Aucune erreur de compilation et dès que je lance, la fenêtre s'affiche avec tous les boutons... mais pas la TOC. En y regardant de plus près je lis sur la console :

java.lang.IllegalArgumentException: InputStream cannot be null
Le chemin est bon

Cette erreur se produit au moment d'instancier un objet MainFrame.

Le fait qu'il dise "Le chemin est bon" prouve bien que le dossier "htmlhelpfiles" existe bien. Donc c'est peut-être moi qui n'ai pas saisi un truc dans les explications fournies sur le site...

Si quelqu'un veut bien essayer de se pencher sur le problème je l'en remercierai.

Meilleures réponses pour « [JAVA] Librairie HelpGUI » dans :
[Firefox] plugin Java Jre de Sun VoirA) Les différentes variantes Java chez Sun B) Installation sous Mandriva Limited Edition 2005 ETAPE 1 ETAPE 2: Création du lien symbolique C) Installation sous debian lenny D) Installation sous ubuntu hardy heron A) Les différentes...
Installer Java sous Ubuntu VoirPar défaut, Firefox n'est pas fourni avec Java. Voici comment procéder pour l'installer: Ouvrez un terminal (Menu Applications > Accessoires > Terminal) et tapez: sudo aptitude install sun-java6-jre sun-java6-plugin ou sudo aptitude install ...
[Logiciel libre] Installation firefox 2.0+java+flash VoirInstallation firefox 2.0+java+flash en ligne de commande A. INTRODUCTION B. INSTALLATION FIREFOX 1. Création d'environnement 2. Téléchargement et vérification de la signature 3. Installation de Firefox 4. Démarrage de l'application C....
Télécharger Java Runtime Environment VoirJava Runtime Environment (JRE) installe la machine virtuelle Java, permettant de jouer en ligne, de discuter avec des personnes dans le monde entier, de calculer les intérêts de votre prêt immobilier ou de visualiser des images en 3D. Ces...
Java - Premier programme VoirPremière application avec Java La première chose à faire est de créer un simple fichier texte (sans mise en forme) et de taper les quelques lignes suivantes : // Votre premiere application en Java class FirstApp { public static void main...
Java - Les types de données VoirLes primitives Java est un langage orienté objet, c'est-à-dire que les éléments manipulés sont des classes, ou plus exactement des objets, c'est-à-dire des instances de classes. Toutefois ces objets contiennent des données possèdant un type (et...
J2EE - Java 2 Enterprise Edition VoirIntroduction au Java Framework Le «Java Framework» (Java 2 Platform) est composé de trois éditions, destinées à des usages différents : J2ME : Java 2 Micro Edition est prévu pour le développement d'applications embarquées, notamment sur des...

1

 Posotaz, le 4 déc 2007 à 02:25:43

Bon...

Me doutant bien que le code ne devait pas être terrifiant, j'ai téléchargé les sources, créé un projet appropié et j'ai passé le tout en mode débugguage.

Au moment du parsage du fichier XML (la toc) et puis après au moment du chargement de l'URL de la page HTML (une partie du contenu), les concepteurs de cette librairie ont utilisé les méthodes getResource() et getResourceAsStream() de la classe courante qui ont pour but de se référer au classpath du projet.

Je m'en suis assuré en remplaçant les lignes originales des classes TocOpen et TextArea de ce package par :

saxParser.parse(/*TocOpen.class.getResourceAsStream(*/MainFr­ame.helpPath+"/toc.xml"/*)*/, handler);
url = new URL(/*TextArea.class.getResource(*/"file:"+MainFrame.helpPath+"/"+page.getTarget()/*)*//*.toString()*/);
Et là soulagement tout fonctionne (logique) !

Sauf que je ne comprends toujours pas ce mystère avec le classpath... Je place quand même mon dossier "htmlhelpfiles" à la racine du projet (donc là où se trouve le fichier .classpath) alors je ne comprends pas comment dans sa logique il ne cherche pas là dedans par défaut. J'ai même essayé d'inclure le dossier projet lui-même juste avant l'exécution dans l'onglet "classpath" et rien.

Conclusion

Ce viewer d'aide, comme il fallait s'y attendre, n'est ni plus ni moins qu'un JTree contrôlant le contenu d'un JTextPane avec tous ses défauts :

- Ne pensez pas pouvoir faire de l'XHTML. L'utilisation de balises auto-fermantes se traduira par l'impression du caractère ">" même si la balise sera interprétée. Déclarer le fichier HTML comme étant de l'XML ne changera rien... Java s'attend à recevoir de l'HTML tout court.

- Si vous essayez de définir le codage de la page HTML (<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />) avant la déclaration de la feuille de style (<link rel=stylesheet type="text/css" href="../style.css" />), cette dernière sera ignorée pour une raison obscure (pas de style c'est moche). On peut la mettre après par contre mais je ne sais pas si ça a un intérêt, je dis juste ça parce qu'une page correctement formée devrait contenir cette déclaration plutôt que de laisser le soin au navigateur de détecter automatiquement le charset avec les risques que cela encourt.

Ce ne sont que deux gros défauts trouvés en 5 minutes... imaginez comment pourrait virer la suite.

En conclusion, si vous avez une version online de votre documentation réalisée sous respect des standards du Web, vous êtes partis pour vous taper une deuxième version non standard... maintenir une version dynamique + une version statique risque de demander beaucoup d'efforts.

Dommage...

Répondre à Posotaz