FAQ Langage JavaConsultez toutes les FAQ

Nombre d'auteurs : 41, nombre de questions : 294, dernière mise à jour : 21 mars 2016  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur le forum Java de http://java.developpez.com ainsi que l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.

Sur ce, nous vous souhaitons une bonne lecture.


SommaireEn développementExécution (5)
précédent sommaire suivant
 

Cela se fait de la même manière que dans la plupart des langages comme C/C++, C-Shell, Bash...

Lors de l'appel du programme :

Code Console : Sélectionner tout
java MaClasse param1 param2 ... paramN

Les paramètres sont stockés dans un tableau de chaînes de caractères qui se trouve passé en paramètre dans la méthode main() de la classe principale :

Code Java : Sélectionner tout
1
2
3
public static void main (String[] args) {   
    [...] 
}

On peut ainsi accéder aux éléments rentrés en paramètres via le tableau args, par exemple :

Code Java : Sélectionner tout
1
2
3
4
5
// nombre de paramètres  
int nbParam = args.length;  
for (int i = 0; i < nbParam; i++) {  
    System.out.println(args[i]);  
}

Attention : contrairement à C ou à C++, le premier élément du tableau n'est pas le nom du programme. Le premier argument param1 se trouve donc bien en indice 0 du tableau args.

De plus, une exception est générée si l'on tente d'accéder à un élément qui n'existe pas dans le tableau.

Mis à jour le 29 septembre 2015 bahamouth bouye

Il y a différentes façons de comprendre le mot « exécutable ».

Une machine virtuelle est installée
Vous devez écrire un script dans un fichier de commande (.bat, ...) ou un lanceur natif pour lancer l'application. Vous pouvez également empaqueter votre application dans un fichier JAR exécutable.

Point positif :

  • on simplifie le lancement de l'application.


Points négatifs :
  • la machine virtuelle installée n'est peut-être pas assez récente ou peut-être supprimée par la suite ce qui empêchera le lancement de l'application ;
  • il faut réaliser un script ou un exécutable par plateforme cible ;
  • suivant votre système, l'utilisation d'un script peut provoquer l’apparition d'un terminal ou d'une console à l’écran ;
  • un gestionnaire d'archives peut avoir changé les associations de fichiers par défaut et il n'est plus possible d’exécuter le fichier JAR.


Installation automatique d'une machine virtuelle
Vous pouvez packager votre application avec une machine virtuelle associée, par exemple en utilisant InstallAnyWhere de ZeroG. Certains lanceurs natifs permettent également d'embarquer une JVM avec l'application, ils peuvent être couplés avec un installeur externe.

Point positif :
  • l'utilisateur n'a pas à installer une machine virtuelle lui-même et on est sûr de la compatibilité JVM/application.

Points négatifs :
  • il faut réaliser un exécutable ou un installeur par plateforme cible ;
  • l'application est plus lourde de quelques dizaines de Mo supplémentaires.


Plus de machine virtuelle
Il vous faut utiliser un compilateur natif.

Point positif :
  • l'application est plus légère qu'avec une JVM associée et on gagne en performance. Cependant, le gain est nettement moins significatif maintenant que la JVM utilise un compilateur à la volée (Just In Time).

Point négatif :
  • l'application n'est plus portable et le logiciel, pour rendre le code natif, se limite souvent aux classes les plus courantes de l'API.


Déploiement en applet
Au lieu de créer une application, vous pouvez tenter de créer une Applet ou une JApplet et de l'inclure dans une page web. Cela implique en général que le poste client dispose d'une JVM bien que les scripts de déploiement d'applets puissent rediriger le client vers le lien de téléchargement de Java en cas d'absence de cette dernière.

Point positif :
  • certaines applets peuvent également être détachées de leur page web parente.

Points négatifs :
  • nécessite la présence d'une JVM installée sur le poste client et configurée pour le navigateur web ;
  • pas adapté aux applications non graphiques ;
  • pour des raisons de sécurité, de plus en plus de navigateurs web bloquent le plugin Java par défaut.


Déploiement via le Web ou un réseau interne
Vous pouvez tenter d'utiliser l'outil Java Web Start pour effectuer le déploiement de votre application via le Web ou sur un réseau interne d'entreprise. Cela implique en général que le poste client dispose d'une JVM bien que Java Web Start puisse rediriger le client vers le lien de téléchargement de Java en cas d'absence de cette dernière.

Points positifs :
  • ce mode de déploiement supporte aussi bien les applets incluses dans des pages web que des applications lourdes de bureau ;
  • les mises à jour de l’application sont censées être automatiques ;
  • l'API Java Web Start permet de s'assurer depuis le code de l'application de la présence de raccourcis pour lancer l'application sur le poste client et de les reconstruire si besoin.

Points négatifs :
  • nécessite la présence d'une JVM installée sur le poste client ;
  • pas adapté aux applications non graphiques ;
  • suite aux renforcements de la sécurité de la JVM, votre application devra être signée avec un certificat numérique valide émis par une autorité reconnue ;
  • Java Web Start peut être sujet à des «sautes d'humeur » qui peuvent rendre le déploiement impossible, difficile à déboguer ou encore casser soudainement et sans raison apparente une application qui fonctionnait très bien jusqu’à présent ;
  • les mises à jour de la JVM peuvent faire disparaître ou casser les raccourcis de lancement de votre application ou encore modifier le comportement de Java Web Start.

Mis à jour le 29 septembre 2015 bouye Pierre-Yves VAROUX

Tout d'abord, il convient de créer un fichier texte qui servira de manifeste pour notre fichier JAR. Ce fichier contiendra le nom de la classe à exécuter ainsi que les archives à mettre dans le CLASSPATH.

Code Texte : Sélectionner tout
1
2
3
4
Manifest-Version: 1.0  
Created-By: 1.4.1_01 (Sun Microsystems Inc.)  
Main-Class: Start  
Class-Path: ./archive1.jar ./archive2.jar

Attention : il est nécessaire de terminer le fichier manifeste par un saut de ligne.

Nous appellerons le fichier MANIFEST.MF et il sera placé dans un répertoire META-INF en racine de l'application (par exemple).

Les archives JAR du CLASSPATH ne seront pas incluses dans ce fichier, mais seront situées par la suite dans le même répertoire que nous allons créer (ou dans un chemin bien défini). Si l'on veut qu'elles soient rangées dans un répertoire list, il suffira de donner le chemin dans le manifeste :

Code Texte : Sélectionner tout
Class-Path: lib/archive1.jar lib/archive2.jar

Pour créer le jar il faut déjà supprimer tous les sources .java. L'idéal étant de copier tous les .class (avec leur arborescence s'ils sont dans des packages) dans un répertoire temporaire pour créer le jar dans ce répertoire. Une autre manière de faire est, bien sûr, de bien séparer les fichiers source des binaires en compilant les fichiers .class dans un répertoire spécifique via les options du compilateur.

On peut aussi copier les fichiers qui seront accessibles dans le jar (images, sons, fichiers de traduction, etc.) s'il y en a.

La commande permettant de créer un fichier JAR est la suivante :

Code Console : Sélectionner tout
jar cvfm fichier-jar fichier-manifeste fichiers...

Voilà la signification des différents paramètres :

  • fichier-jar : est le nom du jar à créer ;
  • fichier-manifeste : fichier MANIFEST.MF ;
  • fichiers : fichiers à ajouter à l'archive. Si un des fichiers est un répertoire, celui-ci est traité récursivement.


Dans le répertoire contenant les fichiers .class, on exécutera donc la commande suivante :

Code Console : Sélectionner tout
jar cvfm monappli.jar META-INF/MANIFEST.MF .

Ceci créera un JAR exécutable nommé monappli.jar. Ce fichier contient le fichier manifeste MANIFEST.MF présent dans le répertoire META-INF. Ce JAR se voit ajouter les fichiers du répertoire courant (spécifié par le caractère .).

Le programme JAR reconstruira le fichier manifeste et affichera sur la sortie standard les résultats ce qui permet de vérifier qu'il est codé correctement.

On exécute ensuite le jar de la façon suivante :

Code Console : Sélectionner tout
java -jar monappli.jar

Les archives indiquées sous le paramètre Class-Path du fichier manifeste seront recherchées selon leur chemin relatif par rapport au fichier JAR principal.

Mis à jour le 19 juillet 2004 bahamouth Clement Cunin le y@m's sinok

Autogénération du certificat
Il faut d'abord générer un certificat avec l'outil keytool du JDK :

Code Console : Sélectionner tout
keytool -genkey -alias signature -keystore monStore

Il faut alors répondre aux différentes questions (nom, prénom, société, adresse...). Cela génère un certificat signature qui est stocké dans un dépôt monStore.

Avertissement : suite aux renforcements de la sécurité de la JVM de ces dernières années, plus aucun moyen standard de déploiement ne fonctionne avec des certificats autogénérés. Vous devez donc obtenir des certificats authentiques fournis par une autorité de certification reconnue (ce qui est généralement assez coûteux).

Signature
Lorsque vous avez obtenu votre certificat ou votre certificat autogénéré, vous devez ensuite signer l'archive JAR. Vous devez utiliser l’outil jarsigner du JDK :

Code Console : Sélectionner tout
jarsigner -keystore monStore -signedjar sMonJar.jar monJar.jar signature

Cela génère le JAR sMonJar.jar qui est la version signée avec le certificat signature du fichier JAR monJar.jar.

Mis à jour le 29 septembre 2015 bouye christopheJ

Socket
Une astuce possible est d'utiliser une ServerSocket, du package java.net. On peut lancer un tel type de socket sur un port précis censé être libre lors de l'exécution de la méthode main(). Si une exception est générée, cela indique qu'une instance de l'application est déjà en train de tourner.

Voici un exemple :

Code Java : Sélectionner tout
1
2
3
4
5
6
7
8
9
private static int PORT = 12345;  
public static void main(String[] args) {  
    try (ServerSocket server = new ServerSocket(PORT)) { 
         System.out.println("Instance du programme unique");  
    } catch (Exception e){  
        System.out.println("Il y a déjà une instance du programme active");  
        System.exit(0);  
    }  
}

La seule difficulté sera de déterminer un port libre, c'est-à-dire non utilisé par une quelconque application de la machine.

Java Web Start
Lorsque l'application est déployée via Java Web Start, vous avez accès à l'API de cette extension. Il est alors possible d'utiliser la classe javax.jnlp.ServiceManager ainsi que le service javax.jnlp.SingleInstanceService conçu spécialement pour cela :

Code Java : Sélectionner tout
1
2
3
4
5
6
7
8
9
// Utilisation du service : 
SingleInstanceService singleInstanceService =  (SingleInstanceService)ServiceManager.lookup("javax.jnlp.SingleInstanceService"); 
  
// Ajout d'un écouteur qui sera appelé pour chaque nouvelle instance de l'application : 
singleInstanceService.addSingleInstanceListener(new SingleInstanceListener() { 
    public void newActivation(String[] params) { 
        // 'params' contient les paramètres passés à la nouvelle instance 
    } 
});

Mis à jour le 29 septembre 2015 adiGuba Debernad jcarre

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2016 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsables bénévoles de la rubrique Java : Mickael Baron - Robin56 -