Vous êtes sur la page 1sur 12

TP1 : PRISE EN MAIN DE L’ENVIRONNEMENT JAVA

Un programme Java peut prendre deux formes distinctes, chacune étant adaptée à un contexte
d'invocation et d'exécution différent.

 la première (applications java) permet de créer des applications au sens classique du


terme, c'est à dire des programmes s'exécutant de manière autonome à l'aide d'un
interpréteur Java.
 la deuxième (applets Java) est destinée à des programmes invoqués depuis des document
HTML (HyperText Markup Language) diffusés sur le World Wide Web (WWW) et
exécutés à l'intérieur d'un navigateur (Netscape, Microsoft Internet Explorer) équipé d'un
interpréteur Java ou d'un visualiseur d'applets (par exemple l'application appletviewer
du JDK).

Les exercices qui vous sont proposés ici ont pour but de vous faire expérimenter ces deux types
de programmes Java et de vous faire utiliser les outils de base du JDK (compilateur, machine
virtuelle, documentation....).

exercice 0 : vérifier la présence de java sur votre poste de travail

 ouvrir une fenêtre de commandes


o fenêtre Xterm sous Unix,
o fenêtre d'invite de commandes sous Windows (menu Démarrer->Exécuter-
>cmd) (Attention ! pas command.com qui est du vrai MS-DOS pur jus : pas de
rappel des commandes (doskey), noms limités à 8 caractères...)
 dans cette fenêtre de commandes taper :
1. java -version la réponse doit être java version "1.6.0" ou un numéro de
version supérieur.
2. javac la réponse doit être Usage: javac <options> <source files> ...

Si vous n'obtenez pas les réponses attendues, il faut configurer votre environnement avant de
pouvoir travailler :

 configuration sous Windows 2000 et Windows XP.

exercice 1 : consulter la documentation en ligne de Java SE

Ce premier exercice a pour but de vous faire parcourir la documentation de Java SE mise
en ligne par Oracle afin de vous familiariser avec son organisation. NE LE NEGLIGEZ
PAS ! Pour pouvoir travailler efficacement avec java, il est essentiel de savoir vous
servir de cette documentation et de situer rapidement les éléments qui pourraient vous être
utiles.

Plusieurs versions de JavaSE sont disponibles, la dernière en date étant la version 7. Lorsque
vous utiliser les documentations du JDK, il vaut mieux vous référer à celle correspondant à la
version installée sur votre machine (voir exercice 0) :
 La documentation de Java SE version 6 est disponible à l'URL
 La documentation de Java SE version 7 est disponible à l'URL

Tutoriaux java en ligne

 En partant de la page d'accueil de la documentation JDK 7 () retrouvez la page du site


officiel d'Oracle pour les tutoriaux en ligne de Java SE (voir image ci-dessous). Quelle est
son URL (pensez à l'enregistrer dans vos favoris, elle vous sera utile par la suite) ?
docs.oracle.com/javase/tutorial

 Combien de programmes d'apprentissage (trails) couvrant les bases du langage Java sont-
ils proposés ? 7
 Dans le programme d'apprentissage Getting Started effectuez le cours The "Hello World
!" Application (attention de prendre le cours correspondant à votre plateforme : Windows
ou Unix).
1. Compilation de l'application HelloWorldApp.java.
 Quelle commande avez-vous utilisée ?
javac
 Quel est le nom du fichier créé par cette commande de compilation ?
HelloWorldApp.class
 Que contient-il ? (Affichez son contenu sur la console, commande type
sous Windows, more ou less sous Unix)

class HelloWorldApp

{
public static void main(String[] args)

System.out.println("BONJOUR");

 Invoquez la commande javap -c HelloWorldApp. Quel est l'effet de


celle-ci ?.
Désassemble le programme.
2. Pour executer l'application HelloWorldApp sur la machine où vous l'avez
compilée quelle commande avez-vous utilisée ?
java HelloWorldApp
3. Sans la recompiler exécutez l'application HelloWorld depuis une autre machine
(par exemple si vous avez compilé sous Windows, ouvrez une fenêtre terminal sur
l'une des machines unix).
 si les versions de java sont compatibles sur les deux machines, l'application
doit pouvoir être exécutée sans être recompilée
 si ce n'est pas le cas, recompilez l'application java sur cette seconde
machine et essayez de l'exécuter sur les deux machines.
 Dans quelles conditions un programme java compilé sur une machine A
peut être exécuté sans recompilation sur une machine B ?
si les versions de java sont compatibles sur les deux machines

Documentation des outils du JDK

 En partant de la page d'accueil de la documentation JDK 7 () retrouvez la page présentant


la documentation des outils du JDK (voir image ci-dessous). Quelle est son URL (pensez
à l'enregistrer dans vos favoris, elle vous sera utile par la suite) ?
http://docs.oracle.com/javase/7/docs/technotes/tools/
 Parcourez cette documentation pour voir les outils de base du JDK. Pour chacun des outils
suivants indiquez son rôle :

javac : compiler les programmes java


java : Lancer les programmes java
 appletviewer : Cet outil permet de tester une applet
 javadoc : permet de générer une documentation à partir des données insérées dans le code source
javap : Désassembler les programmes java
jdb : débugger java
 Que signifie l'acronyme jar et qu'est-ce qu'un fichier .jar ? java archive ;
c’est un package qui rassemble plusieurs fichiers(classe, sons, images, vidéo) en un
seul
 Que signifie l'option -showversion de l'interpréteur java ? Quelle est la différence avec
l'option -version ?
Signification :Affiche l’information de la version et continu l’exécution de l’application
............................................................................................................
La différence : « -version » affiche également l’information de la version, sauf que
celui-ci ordonne ensuite à la JVM de quitter après l’avoir affichée
................................................................................................................................................
.............................................
Documentation de l'API de Java SE

 Que signifie le terme API ? Application Programming Interface.


 En partant de la page d'accueil de la documentation JDK 7 () retrouvez la page présentant
l'API Java (voir figure ci-dessous). Quelle est son URL (pensez à l'enregistrer dans vos
favoris, elle vous sera utile par la suite) ?
..................................................................................................

 Retrouvez la documentation de la classe Math de l'API java, classe définie dans le


package java.lang.
Quel est le rôle de cette classe ?
Contient les méthodes pour effectuer les opérations numériques basiques telles que
exponentiel racine carrée, logarithme, sinus, cosinus

Quel est le nom et la signature de la méthode qui permet de transformer une valeur
exprimée en radians en une valeur exprimée en degrés ?
Nom : toDegrees
Signature : public static double toDegrees (double angrad)
 Retrouvez la documentation du package java.net. Que propose ce package ?
il Propose les class pour implémenter les applications réseaux.
Quelle est le nom de la classe de ce package qui permet de représenter sous forme d'un
objet java un cookie http ?
HttpCookie.
 Retrouvez la documentation de la classe String.
A quel package appartient cette classe ? java.lang
A quoi sert cette classe ? elle permet de gérer les chaines de caractères
 Que fait la méthode toUpperCase de cette classe ?
Mettre une chaine en majuscule.

exercice 2 : compiler et exécuter une application java

pour en savoir plus sur : le compilateur javac (JDK 6 windows unix, JDK 7 windows unix) et
l'interpréteur java (JDK 6 windows unix, JDK 7 windows unix )

 Modifiez le programme HelloWorld.java que vous avez écrit dans l'exercice 1 de manière
à ce qu'il provoque l'affichage suivant :
BONJOUR
CECI EST MON
PREMIER PROGRAMME JAVA
ou tout autre texte de votre choix.....
Récompilez le ET exécutez le.
 Sauvegardez dans votre répertoire de travail le programme que vous pouvez télécharger
en cliquant sur le lien suivant Hello2.java.
 Compilez ce programme et exécutez-le successivement avec les commandes :
o java Hello2
o java Hello2 Marie
o java Hello2 Pierre Paul Jacques
 Constatez. En observant le source du programme Hello2.java, que pouvez-vous en
déduire sur le rôle du paramètre args de la méthode main ?
Passer les arguments à la fonction

exercice 3 : compiler et exécuter une applet java

pour en savoir plus sur : le visualiser d'applets appletviewer (JDK 6 windows unix, JDK 7
windows unix )

L'affichage du texte ci-dessous dont les lettres se déplacent de façon aléatoire est en fait géré par
une applet JAVA (écrite par Daniel Wyszynski, Branché JAVA, A.van Hoff,S. Shaio, O. Starbuck,
Ed. International Thomsom Publishing France 1996)

 sauvegardez sur votre compte NervousText.java le source JAVA de cette applet,


 sauvegardez sur votre compte essaiapplet.htm un exemple de fichier HTML qui
incorpore cette applet,
 compilez la classe NervousText.java que vous avez sauvegardée sur votre compte.

La compilation de cette classe vous indique que certaines méthodes utilisées par ce programme
sont dépréciées. Présentes dans les premières versions de la plateforme java, ces méthodes ont
depuis été remplacées par de nouvelles méthodes introduites dans les versions successives de la
plate-forme java. Toutefois les messages de "dépréciation" sont simplement des avertissements
(warnings), le code compilé est exécutable. Ces messages sont là pour signifier au programmeur
l'utilisation de méthodes dépréciées qui peuvent s'avérer dangereuses ou risquent de ne plus être
supportées dans de future versions de java et qu'il serait préférable de remplacer par de nouvelles
fonctionnalités de la plate-forme java.

Quelle option du compilateur java permet de voir le détail des méthodes dépréciées ?
javac -deprecation NervousText.java

Recompilez la classe NervousText avec cette option. Quelles sont les méthodes dépréciées
utilisées dans NervousText ? Dans quelles classes sont elles définies ? Que dit la documentation
à leur sujet ?
Méthodes dépréciées utilisées : resume() et suspend() de la classe java.lang.Thread.
Ces méthodes peuvent provoquer un bloquage (deadlock) du système

 exécutez cette applet

1. en chargeant le fichier essaiapplet.htm dans votre navigateur Web si celui ci-est équipé
d'une machine virtuelle java (ou si le Java Pluggin a été installé)
2. en lançant depuis la ligne de commande la commande appletviewer essaiapplet.htm

 Quel fichier devez vous modifier (NervousText.java et/ou essaiapplet.htm) afin


d'afficher le texte suivant : "VIVEMENT QUE NOUS PARTIONS AU SKI !" (ou tout autre
texte de votre choix) ?
Le fichier à modifier est le fichier essaiapplet.htm qui contient l'appel à l'applet
 Faites ces modifications et testez les.

exercice 4 : Compilation, exécution, documentation d'une application simple

pour en savoir plus sur :

 le générateur de documentation javadoc (JDK 6 windows unix, JDK 7 windows unix )


 le class path (JDK 6 windows unix, JDK 7 windows unix ) : pour définir les règles de
recherche des byte-codes des classes java.
 la construction de fichiers jar (fichiers Java ARchives) (JDK 6 windows unix, JDK 7
windows unix )

Lorsque l'on développe une application constituée de plusieurs fichiers il est important de bien
organiser ceux-ci sur son espace disque. Ainsi une organisation classique est de séparer dans
différents répertoires les fichiers selon leur nature. Ainsi pour un projet de développement en
JAVA on pourra choisir l'organisation suivante : dans un répertoire correspondant au projet
définir 3 sous repertoires :

 un répertoire src (sources) contenant les code source des classes JAVA
 un répertoire classes contenant le code compilé (byte-code) des classes JAVA
 un répertoire docs contenant la documentation des différentes classes JAVA

Dans l'exercice qui suit vous allez expérimenter cette organisation avec l'application vue en cours
qui permet l'animation de visages sur l'écran. Cette application est constituée de 3 classes Java :

 VisageRond qui décrit des objets modélisant un Visage animé.


 Dessin qui décrit l'objet chargé de la gestion et l'affichage des différents objets Visages
qu'il contient
 AppliVisage1 le programe principal qui crée les Visages, les place dans la zône de dessin
et lance l'animation.

a) compilation de l'application

1. Créez un repertoire Visages avec trois sous répertoires src , docs et classes
(commande mkdir sous MS-DOS)
2. Sauvegardez dans le répertoire src les fichiers sources des différentes classes de
l'application : VisageRond.java, Dessin.java et AppliVisage1.java
3. Placez vous dans le répertoire src (commande cd) et compilez l'application
AppliVisage1 en utilisant la commande
javac -d ../classes AppliVisage1.java
o Quel est le rôle de l'option -d utilisée dans la commande javac ?
l'option -d indique le répertoire où seront rangés les fichier
compilés (fichiers de bytecode avec l'extension .class)

o Quels ont été les fichiers créés par la commande de compilation de la classe
AppliVisage1 ?
AppliVisage1.class, VisageRond.class et Dessin.class
o Qu'en déduisez-vous ? ...............................
Que le compilateur java est suffisament "intelligent" pour voir les dépendances entre
fichiers (à l'image de make). Ici comme Applivisage1 utilise les classes
VisageRond et Dessin, la compilation d'AppliVisage1 entraine
aussi la compilation de VisageRond et Dessin.

b) exécution de l'application

1. Placez-vous dans le répertoire classes (commande cd) et exécutez l'application


AppliVisage1. Faire CTRL C sur la ligne de commandes pour arrêter l'application.
o Quelle est la commande utilisée pour lancer cette exécution ?
java AppliVisage1
2. Placez vous maintenant dans le répertoire Visages et retapez la commande utilisée
précédemment pour l'exécution de l'application AppliVisage1.
o Quel message est affiché ?
Exception in thread "main"
java.lang.NoClassDefFoundError: AppliVisage1
o Que signifie-t'il ?
Que la macine virtuelle n'a pas trouvé le code de la classe AppliVisage1.
3. L'option -classpath (ou -cp) de la commande java permet d'indiquer à l'interpréteur
Java où trouver les classes à charger (voir la doc : JDK 6 windows unix, JDK 7 windows
unix ).
o En utilisant cette option quelle est la commande à utiliser pour lancer l'application
depuis le répertoire Visages ?
java -cp classes AppliVisage1
4. Déplacez le fichier AppliVisage1.class du répertoire classes vers le répertoire
Visages (commande move sous MS-DOS).
o Toujours en restant positionné dans le répertoire Visages essayez d'éxecuter
l'application AppliVisage1 par la commande java AppliVisage1.
Que constatez-vous ?
Que la macine virtuelle n'a pas trouvé le code de la classe Dessin.
Quelle explication pouvez-vous donner ?
On n'a pas spécifié où trouver la classe Dessin, incluse dans la classe
AppliVisage1.
o Essayez ensuite d'éxecuter l'application AppliVisage1 par la commande utilisée à
la question 3 de cet exercice. Que constatez vous à nouveau ? Qu'en déduisez vous
? Cette fois ma machine virtuelle ne trouve pas la classe AppliVisage1 car elle
ne cherche que dans le répertoire classes
o Quelle valeur faut-il donner à l'option -classpath pour pouvoir lancer
correctement l'exécution depuis le répertoire Visages (avec dans ce repertoire le
fichier AppliVisage1.class, et les fichier Dessin.class et VisageRond.class
situés dans le répertoire classes) ?
java -cp .:classes AppliVisage1 On donne deux répertoires
pour trouver les classes : le répertoire courant (désigné
par «. ») et le répertoire classes, séparés par «:»

c) construction et utilisation de fichiers jar

1. Replacez vous dans le répertoire classes. Normalement si vous avez respecté les étapes
précédentes, ce répertoire ne doit contenir plus que les fichiers Dessin.class et
VisageRond.class , fichiers contenant le byte-code des classes Dessin et VisageRond.
2. En vous aidant de la documentation de la commande jar (JDK 6 windows unix, JDK 7
windows unix ) , construisez dans le répertoire classes un fichier JAR (Java Archive) de
nom visages.jar contenant ces deux fichiers.
o Quelle est la commande à utiliser ?
jar -cvf visages.jar *.class
o Si vous ne l'avez pas fait, ajoutez l'option v à la commande utilisée ? Quel est son
rôle ?
v est l'option qui permet d'avoir des commandes "bavardes"
(verbose). Dans le cas de la création d'un fichier archive
elle permet de voir les noms, tailles, taux de compression
de chacun des fichiers ajoutés à l'archive.
3. Que fait la commande jar tvf appliquée au fichier jar que vous venez de créer ?
d'afficher sur la console le nom et la taille des fichier contenus dans l'archive.
4. Déplacez le fichier jar dans le répertoire Visages.
5. Replacez vous dans le répertoire Visages et lancez à nouveau l'exécution en utilisant ce
fichier jar dans l'option -classpath de la commande java.
o Quelle est la commande à utiliser pour lancer cette exécution ?
java -cp .;visages.jar Applivisage1 sous Windows
le classpath permet de spécifier pour la recherche des
classes le répertoire courant (. ) nécessaire pour trouver
AppliVisage1.class et le fichier
visages.jar nécessaire pour touver Dessin.class et
VisageRond.class
6. D'après vous quel est l'interêt des fichiers jars ? (Des éléments de réponse sont dans la
documentation de la commande jar)
(Des éléments de réponse sont dans la documentation de la commande jar) Entre autres, les
fichiers jar permettent de compacter une application java dans un seul fichier, ce qui facilite la
distribution de l'applicationd) génération automatique de la documentation

Pour comprendre le fonctionnement et le rôle des différentes classes de l'application Visages


vous allez générer la documentation de celles-ci à l'aide de l'outil javadoc.

1. S’il n'existe pas encore, créez un répertoire docs dans le répertoire Visages
2. Placez vous dans le répertoire src et lancez la commande javadoc -d ../docs
*.java.
o Quels fichiers cette commande a-t-elle créés (et où se trouvent-ils) ?
Les fichiers créés sont les fichiers html correspondant à la documentation des classes
AppliVisage1, Dessin et VisageRond. ils se trouvent dans le
répertoire docs
3. Le point d'entrée de la documentation générée est le fichier index.html.
o Ouvrez ce fichier depuis votre navigateur et parcourez cette documentation.
o La documentation de la classe VisageRond référence un image que vous trouverez
ici : figurevisage.gif. Pour que la documentation soit complète recopiez cette
image dans le répertoire docs.
o En comparant la documentation générée et le code source des différents classes
Java, pouvez-vous déduire quels ont été les élements des fichiers sources ayant
permis de produire cette documentation ?
Les commentaires spéciaux /** ... */ qui précèdent la
définition de la classe, de chacun de ses attributs et de
chacune de ses méthodes. Ces commentaires sont des
commentaires documentants, exploités pas l'outil
javadoc au contraire des commentaires "classiques" /* ... */
ou // .
4. Les méthodes setDy et getDy de la classe VisageRond ne sont pas documentées.
o Modifiez le source de la classe VisageRond afin de documenter ces méthodes.
o Regénérez la documentation.
o Vérifiez que vos modifications ont correctement été prises en compte.

e) Modification d'une classe de l'application


pour en savoir plus sur :

 la création et manipultation d'objets : Création, Référencement d'objets et envoi des


messages

1. Modifiez le source de classe VisageRond afin que la taille par défaut d'un visage soit de
100x100 pixels au lieu de 50x50 pixels
2. Recompilez cette classe (en prenant bien soin de placer le fichier bytecode dans le
répertoire classes).
o Quelle commande avez vous utilisée ?
Dans le répertoire src :
javac -d ../classes/ VisageRond.java
o Quelles ont été les classes recompilées ?
La classe Dessin a été recompilée aussi car elle utilise
VisageRond.
3. Vérifiez que votre modification fonctionne en réexécutant l'application AppliVisage1.
o Quelle commande avez vous utilisée pour cette exécution ? Dans le répertoire
Visages:
java -cp classes/ AppliVisage1

f) Erreurs de compilation

1. Sauvegardez dans le répertoire src le fichier : AppliVisage2.java


2. Placez vous dans le répertoire src et compilez AppliVisage2 avec la commande javac
-classpath ../classes -d ../classes AppliVisage2.java.
o Quels sont les erreurs de compilation et les corrections que vous proposez ?
AppliVisage2.java:30: cannot find symbol
symbol : constructor VisageRond(int,int,int)
location: class VisageRond
VisageRond v2 = new
VisageRond(d.getLargeur()/2,d.getHauteur(),2); Ne trouve pas
de constructeur de la classe VisageRond ayant 3 entiers en
paramètre. Il s'agit probablement d'une erreur de frappe, la
dernière virgule aurait dû etre un divisé : VisageRond v2 = new
VisageRond(d.getLargeur()/2,d.getHauteur()/2);
AppliVisage2.java:31: setDy(int) in VisageRond
cannot be applied to (double)
v2.setDy(-5.0); Appel de la méthode setDy() avec un paramètre
de type double alors qu'elle exige un paramètre du type int.
Correction : v2.setDy(-5);
AppliVisage2.java:44: cannot find symbol
symbol : variable bordAtteint
location: class VisageRond
if (v2.bordAtteint) Ne trouve pas la variable de classe
bordAtteint de la classe
VisageRond. Les parenthèses ont été oubliées, il s'agit de la
méthode
bordAtteint() .
AppliVisage2.java:47: cannot find symbol
symbol : method Deplacer()
location: class VisageRond
v1.Deplacer(); Ne trouve pas la méthode Deplacer() de la
classe VisageRond. Il s'agit d'une erreur de frappe : cette
méthode s'écrit deplacer() avec une minuscule. Attention : en
java (comme dans la plupart des langages de programmation),
la moindre erreur de frappe provoque une erreur de
compilation ! Deplacer et deplacer ce n'est pas du tout la même
chose !
3. Après avoir effectué ces modifications, recompilez et exécutez l'application
AppliVisage2.

g) Erreurs d'exécution

1. Sauvegardez dans le répertoire src le fichier : AppliVisage3.java


2. Placez vous dans le répertoire src et compilez AppliVisage3 avec la commande javac
-classpath ../classes -d ../classes AppliVisage3.java
3. Exécutez l'application AppliVisage3.
o Que se passe-til ? Deux erreurs surviennent lors de l'éxecution :
java. lang.NullPointerException à
AppliVisage3.main(AppliVisage3.java:35) et à
Dessin.dessinerLesVisageRond(Dessin.java:90) . Ceci signifie qu'on
essaye d'utiliser un objet qui vaut null.
4. A l'aide du message d'erreur produit, localisez et corrigez l'erreur. Quelle correction avez
vous effectuée ?
: on passe en paramètre l'objet v1 qui a
o AppliVisage3.java:35
précédemment été initialisé à null. Il faut d'abord instancier v1
en faisant appel à un constructeur de la classe VisageRond :
VisageRond v1 = new
VisageRond();
o En recompilant et ré-éxecutant après avoir corrigé cela, on
s'aperçoit que le code fonctionne : la deuxième erreur était
provoquée par la même erreur dans le code.
5. Recompilez et réexecutez cette application.

Vous aimerez peut-être aussi