Recherche sur le blog

lundi 18 avril 2011

[WinDev] Exécuter du Java dans WinDev

Étant donné l'absence de QRCode dans WinDev 15, il a fallu développer une petite application Java permettant d'encoder des caractères dans ce fameux code. Le code QR est un type spécifique de code-barres qui peut contenir jusqu'à un peu plus de 4200 caractères alphanumériques, voire plus de 7000 caractères uniquement numériques. "QR" est en fait un acronyme qui signifie "Quick Response" car le contenu du code est récupéré quasi instantanément, quel que soit la taille de celui-ci. Le code-barres est en 2D et est représenté par un ensemble de modules noirs sur fond blanc. Il peut être décodé par les smartphones actuels grâce à une application gratuite ou grâce aux lecteurs adéquats. Bref, ceci est une digression car ce n'est pas le but premier de l'article.

En effet, dans WinDev 15 il est possible d'exécuter du code Java qui a été écrit et compilé sous forme de classe. Deux fonctions permettent en effet de réaliser cette opération : la première a pour but de charger toutes les classes nécessaires, tandis que la seconde permet de lancer la fonction "main" de la classe que l'on spécifie en paramètre. Voyons ces deux fonctions un peu plus en détail...

Chargement des classes

La fonction suivante définit la localisation des classes pour le classloader. Les différents répertoires/dossiers (ou archives) seront séparées par des ";". Comme renseigné dans la documentation, cette méthode ne peut être appelée qu'une seule fois. Un double appel génèrera une erreur et l'application sera fermée.

JavaCharge("c:\my_classes\applic.jar")

Exécution de la classe désirée

Pour qu'une classe puisse être exécutée, elle doit implémenter la fonction statique "void main" avec comme paramètre un tableau de chaînes (arguments) qui sont les paramètres passés à l'application (String args[]). Contrairement à une exécution en ligne de commandes (par exemple, via l'interpréteur Windows), les paramètres séparés par un espace seront considérés comme un seul et unique paramètre! 

JavaExecute("Application", "MaChaîne")

Le premier paramètre est le nom de la classe dont on veut appeler la méthode "main" (qui est le point d'entrée de l'application Java). Si la classe se trouve dans un package, il faut indiquer le nom complet avec le nom de chacun des packages, le tout séparé par "/". Ensuite, le deuxième paramètre de la fonction JavaExecute sera le paramètre envoyé et stocké dans le tableau d'arguments.

En ligne de commandes (en supposant que notre classe soit stockée dans une archive JAR), lorsque l'on exécute la commande... : 

java -jar x.jar param1 param2

Les paramètres sont respectivement stockés dans :

args[0] et args[1], soit args[0] == "param1" et args[1] == "param2"

Cependant, si "MaChaine" (dans JavaExecute) vaut aussi "param1 param2", le tout sera stocké dans args[0] tel que args[0] == "param1 param2". Une solution peut-être d'envoyer une chaîne contenant un caractère de séparation, qui sera traitée dans l'application Java grâce à la classe StringTokenizer.

Voilà qui peut être utile à tout le monde! Bon développement...

2 commentaires:

java a dit…

J'ai jamais su que cela peut se faire, merci pour ce tuyau!

Vincent a dit…

De rien. Cela permet par exemple d'appeler un programme Java créant des QR code sur base d'un fichier texte généré par WinDev. Bien sûr, il faut intégrer une DLL aux installations (msvcr71.dll) pour que la détection de Java fonctionne lors du chargement des classes.