
Réponses de la FAQ
comp.lang.vrml
3. Problèmes avec Java
L'installation de la plupart des navigateurs VRML installera automatiquement les classes VRML Java. Voici quelques installations par défaut que je connais:
|
Windows 95/Netscape Navigator et Communicator |
|
|---|---|
| Cosmo Player 2.1 | C:\Program Files\Netscape\Navigator\Program\Plugins\Npcosmop21.zip |
| C:\Program Files\Netscape\Communicator\Program\Plugins\Npcosmop21.jar | |
| WorldView 2.0 | C:\Program Files\WorldView for Netscape Navigator\classes |
| Community Place | C:\Program Files\Community Place Browser\lib\java\vsclass.zip |
| CCPro | C:\Program Files\Blaxxun Interactive\CCPro\Java\classes |
|
Unix |
|
| Cosmo Player 1.02 (IRIX) |
/usr/CosmoPlayer/classes/vrml Il est quelquefois nécessaire de copier ce dossier à ~/.netscape/plugins/classes/vrml |
Quelqu'un connaît-il l'endroit où trouver les classes Java dans d'autres navigateurs? D'autres plateformes?
Premièrement, assurez-vous que votre navigateur VRML supporte Java dans le nœud Script.
Cosmo Player, Community Place, et WorldView sont parmi les navigateurs
reconnus comme supportant pleinement Java dans les Scripts.
Il y a deux classes de navigateur VRML sur les machines Windows 95 et NT: l'un modifie le fichier autoexec.bat
en ajoutant les classes VRML à votre variable d'environnement CLASSPATH.
L'autre tire parti d'un raccourci dans Netscape Navigator et Communicator
permettant au "plugin" de chercher pour un fichier .zip ou .jar
dans le dossier "plugins" de Netscape. Les premiers sont plus susceptibles
de connaître des problèmes occasionnés par la variable CLASSPATH.
WorldView et Community Place modifient autoexec.bat et Cosmo Player utilise le dossier "plugins".
Si vous avez WorldView ou Community Place suivez cette procédure intelligemment définie par Jeff Harrington:
D'abord, tapez ceci dans une fenêtre DOS:
set CLASSPATH=c:\java\vrmlOu le chemin où vos classes Java sont installées. Maintenant, de la même fenêtre DOS, testez en démarrant Netscape à partir de l'invite de commande DOS:
CD \ CD "Program Files\Netscape\Navigator\Program"et tapez:
NetscapeSI ça marche, alors c'est que tout fonctionne à merveille. Ajoutez une instruction à votre
autoexec.batcomme celle-ci:set CLASSPATH=c:\java\vrml;%CLASSPATH%SI ça ne fonctionne pas, essayez avec un autre nom de chemin. Votre problème est cependant identifié:
CLASSPATHn'est pas correctement assigné pour dire à Netscape où regarder pour les classes Java externes.
Non seulement vous pouvez éprouver des problèmes en n'ayant pas
suffisamment de classes dans votre CLASSPATH, vous pouvez aussi en avoir si vous en avez trop.
La façon de faire la plus sûre est de repartir à zéro (rien dans CLASSPATH),
lisez les messages d'erreurs, et ajoutez les classes jusqu'à ce
que ça fonctionne.
J'ajouterai ici un avis de Justin Couch: il y a quelques problèmes récurants avec Java (les Script
Java fonctionnent bien, mais pas l'EAI) qui ne peuvent être résolus
qu'en désinstallant Netscape et tous ses "plugins", le réinstaller
ensuite dans un dossier avec un nom différent, et réinstaller votre "plugin" VRML.
Un autre problème survient lorsque vous avez plusieurs navigateurs VRML acceptant les scripts Java. Il y a une page à "VRMLworks" traitant des problèmes avec plusieurs plugins.
Votre compilateur Java ne sait pas où
se trouve vos classes VRML. Si vous utilisez javac, le compilateur à
ligne de commande dans le Sun's Java Development Kit (JDK), vous aurez
besoin de définir votre variable d'environnement CLASSPATH.
D'autres compilateurs ou environnements de programmation Java pourront
utiliser d’autres conventions pour établir un chemin de recherche,
mais ce qui suit pourra s'appliquer avec quelques modifications à
votre système. La situation se complique un peu plus avec le JDK
1.0x de Sun qui ne reconnaît pas toujours les classes contenues dans
un fichier zip. Et encore d'autres complications surviennent de l'emploi
de certains compilateurs parce qu'ils utilisent DEVCLASSPATH
au lieu de CLASSPATH.
Voici une solution avec javac sur Windows 95 qui a fonctionné pour moi:
C:\Java\Classes. Les versions de WinZip plus récentes reconnaissent les fichiers
jar, mais si vous possédez une version plus vielle, vous pouvez simplement
ajouter jar au type de fichiers pouvant être ouvert par WinZip.
CLASSPATH:
SET CLASSPATH=C:\Java\Classes\;.;%CLASSPATH%
Vous pourriez devoir utiliser DEVCLASSPATH selon vos outils.
JAVAC foo.java
Faites la même chose sur les systèmes Unix, à l’exception que vous changerez les variables d'environnement de la façon habituelle dans votre shell:
# set CLASSPATH=/usr/local/java/whatever # export CLASSPATH
% setenv CLASSPATH /usr/local/java/whatever
Si ça fonctionne, et vous pourriez devoir expérimenter un peu pour définir
correctement CLASSPATH, ajoutez la ligne que vous avez tapée à l'étape 3 ci-dessus,
soit dans autoexec.bat ou dans le fichier d'initialisation ou la liste de préférences
de votre compilateur Java. Don Brutzman nous fournit quelques informations
supplémentaires sur la configuration pour la compilation
et l'exécution de code Java à la Naval Postgraduate School.
Tout d'abord, regardez à votre console Java, si votre navigateur web en a une. Déterminez ce que le Java Virtual Machine (JVM) ou le Java runtime vous dit qu'il vous manque. Si la classe ou objet qu'il ne peut trouver sont réellement là, il y a deux explications possibles:
for(int i = 0; i<SOME_NUMBER; i++)
{
Browser b = Browser.getBrowser();
if(b == null)
sleep(SOME_TIME_VALUE)
else
break;
}
J'ai vu beaucoup de gens utiliser 5 pour SOME_NUMBER et 500 pour SOME_TIME_VALUE.
D'autres font comme suit:
for(int i = 0; i<SOME_NUMBER; i++)
{
Browser b = Browser.getBrowser();
if(b != null)
break;
try {
Thread.sleep(SOME_TIME_VALUE);
}
catch(InterruptedException e)
{ // action bidon
}
}
Justin note que vous pouvez avoir besoin de répéter cette procédure avec getNode().
Et j'ajouterai que toutes les fois que vous obtenez des "null pointers"
qui semblent vous dire que l'objet n'est pas encore là, utilisez
les exemples ci-dessus pour vous dépanner. J'ai découvert
aussi que de déplacer l'initialisation de pointeurs en dehors de
la méthode initialize() vers la fonction qui est
appelée par le script donnera de bon résultats,
particulièrement si le script dépend d'une action provoquée
par l'usager, et à ce moment on peut assumer de façon
sûre que le monde a été chargé.
Justin Couch a découvert
qu'un différent NullPointerException peut se produire avec Netscape
Communicator avec la correction ("patch") AWT installée. Il semble
que ce soit un bug dans Communicator, et la façon de le contourner
est d'enlever toutes références aux classes Netscape dans
le CLASSPATH.
Assurez-vous d'abord que c'est EAI qui ne fonctionne pas et non votre code. Les exemples dans les spécifications de travail de l'EAI de Chris Marrin devraient tous fonctionner. Si quelques-uns fonctionnent alors que d'autres ne fonctionnent pas, c'est que votre navigateur ne supporte pas correctement toutes les classes de l'EAI. Le EAI FAQ de Ross Finlayson possède nombre d'indices pour vous aider à faire fonctionner l'EAI sur votre machine. Et des Exemples VRML de Michael Paulitsch montrent nombres de techniques pour Java Script et l'EAI, quoiqu'il serait sage d'utiliser la technique mentionnée dans la question précédente si vous rencontrez des erreurs de "NullPointerExceptions".
Un nouveau symptôme a vu le jour avec le lancement de la version 2.1 de Cosmo Player. Le
message d’erreur est "netscape.javascript.JSException:
unable to reflect embed with index 0 - not loaded yet?" Auparavant, vous pouviez
avoir les classes Java d'autres navigateurs dans votre CLASSPATH et Cosmo Player les
aurais ignorées. Ce n'est plus le cas, et il
faut vous en débarrasser. La façon la plus simple est de
renommer le fichier ou le dossier. Par exemple, C:\Java\classes\current.zip
est dans mon CLASSPATH; je le renomme foo.zip. Ensuite quand je veux utiliser l'autre navigateur, je rétablis le
nom à current.zip.
![]()
Ai-je oublié quelque chose qui vous serait utile dans ces questions? Si c'est le cas, faite-le moi savoir.
-- Bob Crispen
-- Samedi, 4 mars, 2000
Notes du traducteur:
Si vous avez des suggestions, corrections ou commentaires à apporter,
n'hésitez pas à me contacter
-- Sylvain Carette
-- Dimanche, 17 juin 2001