I. Introduction▲
Pour ceux qui connaissent le logiciel Flash, il est certes aussi facile de créer des animations vectorielles en Flash qu'en Java.
Ces animations peuvent varier d'un simple mouvement rectiligne d'un objet graphique, à la création d'une séquence de dessins animés.
La création de ces animations est rendue facile et rapide grâce à la richesse et la convivialité de l'IDE Flash qui est actuellement en version CS5.
Les animations Flash portent l'extension .SWF. Ce format de publication est connu pour sa grande capacité multimédia vu qu'on peut y incorporer des dessins vectoriels, des images, des sons waves ou mp3, comme on peut aussi ajouter de la vidéo.
Penser à intégrer ces animations à vos conteneurs SWING sera sûrement une idée originale.
La firme Apple fournit le plug-in QuickTime pour permettre de lire différents formats multimédias notamment les fichiers .SWF. Les fonctionnalités sont réduites et les versions récentes de Flash player ne sont pas supportées par ce plug-in, ce qui nous emmène à délaisser cette technologie.
Une autre technologie qui peut être utilisée pour afficher les fichiers .SWF en Java est l'API JFlashPlayer qui permet de plus le contrôle des animations Flash avec des instructions Java.
II. Présentation de l'API JFlashPlayer▲
Cette API est actuellement dans sa version 2.0. Elle fait partie du paquetage JPackages qui contient une collection de bibliothèques qui peuvent s'interfacer avec les API Java standards.
Cette API fournit plusieurs fonctionnalités pour manipuler les fichiers SWF :
- lire des animations Flash avec un contrôle pour arrêter, rembobiner, lire en boucle, etc. ;
- appeler des méthodes Java à partir du code ActionScript (langage script propriétaire fourni avec l'IDE Flash) ;
- appeler des fonctions créées en ActionScript dans les classes Java ;
- installer le plug-in Flash player dynamiquement s'il n'existe pas sur la machine au préalable ;
- etc.
Cette API peut être utilisée seulement sous un environnement Windows notamment Windows 98, Me, NT4, 2000, XP et Vista. Les auteurs de l'API ne prévoient pas de créer des versions pour les systèmes Linux et Mac OS.
On ne peut pas utiliser cette API dans les applets pour plusieurs raisons, y compris le niveau de sécurité fourni par les applets.
III. Étude de cas : intégrer une animation Flash dans une fenêtre Java▲
III-A. Configurations nécessaires▲
Pour fonctionner, JFlashPlayer exige l'inclusion de bibliothèques natives d'extension .dll qui doivent être spécifiées dans la variable d'environnement PATH.
Il faut donc installer Le Flash player sur la machine pour que l'API puisse fonctionner. S'il est déjà installé, ce player peut être détecté, sinon on peut l'installer dynamiquement avec les méthodes fournies par l'API.
Les versions JRE supportées par l'API sont : 1.4, 1.5 et 1.6.
- Sur le sitesite api de l'API, vous trouvez un zip qu'il faut télécharger et décompresser.
Ce paquetage contient une archive jflashplayer.jar qui doit être spécifiée dans la CLASSPATH de votre IDE Java pour pouvoir travailler avec l'API.
III-B. Implémentation▲
Dans cette partie, je vais présenter le code d'une application qui permet de lire et contrôler des animations Flash en Java.
Cette application est composée d'une seule classe « Lecteur » qui crée une instance de la classe JFrame pour afficher une fenêtre dans laquelle on va intégrer une animation Flash.
Au début, il faut créer le menu « Fichier » composé de six commandes permettant la lecture et le contrôle du contenu SWF.
private
void
créerMenu
(
)
{
getContentPane
(
).setBackground
(
Color.WHITE);
setJMenuBar
(
menuBar);
menuBar.add
(
fichierMenu);
fichierMenu.setText
(
"Fichier"
);
fichierMenu.add
(
menuOuvrir);
menuOuvrir.addActionListener
(
this
);
menuOuvrir.setText
(
"Ouvrir"
);
fichierMenu.add
(
menuLire);
menuLire.setText
(
"Lire"
);
menuLire.addActionListener
(
this
);
fichierMenu.add
(
menuArreter);
menuArreter.setText
(
"Arréter"
);
menuArreter.addActionListener
(
this
);
fichierMenu.add
(
menuArriére);
menuArriére.setText
(
"Arriére"
);
menuArriére.addActionListener
(
this
);
fichierMenu.add
(
menuAvant);
menuAvant.setText
(
"Avant"
);
menuAvant.addActionListener
(
this
);
fichierMenu.add
(
menuRebombiner);
menuRebombiner.setText
(
"Rebombiner"
);
menuRebombiner.addActionListener
(
this
);
}
Pour gérer les appuis sur ces menus de commandes, on doit redéfinir la méthode actionperformed() de l'interface ActionListener :
public
void
actionPerformed
(
ActionEvent menuSelectionné)
{
try
{
if
(!
FlashPanel.hasFlashVersion
(
"10"
))
// si la version 10 du flash player n'existe pas sur la machine
// alors lancer son installation dynamiquement
FlashPanel.installFlash
(
"10"
);
}
catch
(
JFlashLibraryLoadFailedException err) {
err.printStackTrace
(
);
}
if
(
menuSelectionné.getSource
(
) ==
menuOuvrir) {
JFileChooser fileOuvrirSWF =
new
JFileChooser
(
);
if
(
fileOuvrirSWF.showOpenDialog
(
this
) ==
JFileChooser.APPROVE_OPTION) {
FlashPanel.setRequiredFlashVersion
(
"10"
);
try
{
// le deuxième paramètre est à false pour
// ne pas démarrer l'animation à son chargement
lecteurFlash =
new
FlashPanel
(
new
File
(
fileOuvrirSWF
.getSelectedFile
(
).getAbsolutePath
(
)), false
);
getContentPane
(
).add
(
lecteurFlash);
validate
(
);
}
catch
(
FileNotFoundException e) {
e.printStackTrace
(
);
}
catch
(
JFlashLibraryLoadFailedException e) {
e.printStackTrace
(
);
}
catch
(
JFlashInvalidFlashException e) {
e.printStackTrace
(
);
}
}
}
else
if
(
menuSelectionné.getSource
(
) ==
menuLire) {
// lancer la lecture de l'animation flash
lecteurFlash.play
(
);
}
else
if
(
menuSelectionné.getSource
(
) ==
menuArreter) {
// arrêter la lecture de l'animation
lecteurFlash.stop
(
);
}
else
if
(
menuSelectionné.getSource
(
) ==
menuArriére) {
// reculer la tête de lecture
lecteurFlash.back
(
);
}
else
if
(
menuSelectionné.getSource
(
) ==
menuAvant) {
// avancer la tête de lecture instantanément
lecteurFlash.forward
(
);
}
else
if
(
menuSelectionné.getSource
(
) ==
menuRebombiner) {
// commencer une nouvelle lecture de l'animation
lecteurFlash.rewind
(
);
}
}
Il faut spécifier la version du Flash player installée sur la machine avec la méthode setRequiredFlashVersion() :
FlashPanel.setRequiredFlashVersion
(
"version_flash_palyer"
);
Avec le code fourni en haut, on utilise la version 10.
Il faut vérifier la version du player installée sur la machine avec la méthode hasFlashVersion().
FlashPanel.hasFlashVersion
(
"version_flash_palyer"
));
Si cette la méthode retourne la valeur false, il faut donc installer cette version.
FlashPanel.installFlash
(
"num_version"
);
Il vaudrait mieux travailler avec une version installée au préalable.
On peut donc afficher la liste des Flash player installés :
for
(
int
i=
0
;i<
13
;i++
)
{
System.out.println
(
"version : "
+
i+
" disponible ? : "
+
FlashPanel.hasFlashVersion
(
""
+
i));
}
IV. Liens utiles▲
V. Conclusion▲
L'API JFlashPlayer est certainement intéressante. Elle permet en fait de profiter de la puissance de Flash dans la création des animations pour les intégrer dans les interfaces graphiques créées en Java.
Si vous voulez encore publier des fichiers SWF en utilisant des instructions Java, vous pouvez consulter mon article traitant de l'API Transform SWF.
VI. Remerciements▲
Je tiens à remercier la rubrique Java de Developpez.com et son responsable Ricky81.
Je remercie aussi Jacques THERY et blade159 pour la relecture orthographique de cet article.