Archives de catégorie : Java

Problèmes de mémoire ?

Maven OutOfMemoryError

Publié dans Java | Laisser un commentaire

Erreur Maven

Lors d’un build, Maven s’arrête en failure et s’explique par l’erreur suivante :

The system is out of resources.
Consult the following stack trace for details.
java.lang.OutOfMemoryError: PermGen space

Solution

Ajouter la variable d’environnement MAVEN_OPTS : -Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m

Erreur Android : « Debug certificate expired »

Publié dans Java | Laisser un commentaire

Lors de la compilation, si Android vous sort une erreur du style « Debug certificate expired » : ni une ni deux, allez voir votre SDK et supprimez le fichier debug.keystore situé dans le répertoire .android généralement placé dans votre répertoire utilisateur. En clair : ~/.android/debug.keystore (Linux et Mac OS X) %USERPROFILE%/.android/debug.keystore (Windows).

Une réponse longue et plus précise est lisible ici :

"Debug certificate expired" error in eclipse android plugins – Stack Overflow.

Logo Eclipse

Ajouter l’option -vm dans eclipse.ini

Publié dans Java | 2 commentaires

Ce que l’on veut faire

On souhaite préciser le chemin du JDK que la JVM (machine virtuelle Java) utilisera pour faire tourner Eclipse. Certains plugins comme M2Eclipse (le plugin Maven d’Eclipse) en ont parfois besoin car ils utilisent le JDK et non le JRE Java, et c’est donc un moyen de s’assurer que la configuration est bien faites.

Voici un exemple de message d’erreur qui vous incite à ajouter cette option dans le fichier eclipse.ini :

Le JDK étant plus large que le JRE, vous pouvez effectuer cette opération sans crainte.

Continuer la lecture

Logo Virgo

Let’s work OSGi Virgo on Eclipse

Publié dans Java | 4 commentaires

Virgo se présente comme le nouveau et futur module OSGi pour Eclipse performant et facile à utiliser. En très gros, il offre les fonctionnalités du framework Spring (puisqu’il s’appuie dessus) permettant de gérer convenablement des projets OSGi, et fournit un serveur OSGi (appelé Virgo, anciennement Spring dm Server) utilisant Equinox. N’hésitez pas à visiter le site Web de Virgo pour en savoir plus. Ah oui, et OSGi, c’est un « framework » Java pour gérer des projets Java en s’occupant des dépendances, des cycles de vies, et de tout un tas de choses… Il existe deux implémentations phares de Virgo : Felix et Equinox. Hum, bref, je vous renvoie la page Wikipédia d’OSGi !
Logo de l'alliance OSGiCar ce dont je souhaite bloguer aujourd’hui (du verbe « bloguer » : je blogue, tu bolgues, il/elle/on bluoge, nous bogluons, vous bugolez, ils bolugent), c’est de l’installation d’un environnement Virgo (sur Eclipse, forcément, pas vraiment le choix) !
Continuer la lecture

Transformer un projet Eclipse général en un projet Eclipse Android

Publié dans Java | 3 commentaires

Imaginons que vous ayez un projet Eclipse qui soit de type Java ou autre (ou rien du tout), mais que vous savez pertinemment que c’est un projet Android et que vous aimeriez bien l’utiliser en tant que tel (histoire de pouvoir travailler quoi). D’instinct, on voudrait faire un clic droit sur le dossier, puis Configure > …  mais il n’y a rien pour Android. Voici la technique que je mets en oeuvre quand ça m’arrive.

Il faut modifier le fichier .project (ouvrir l’onglet Navigator pour le voir, ou bien aller directement le chercher sous Windows ou autre dans le dossier du projet Eclipse en question) pour qu’il contienne :

Continuer la lecture

Android : main.out.xml:1: error: Error parsing XML: no element found

Publié dans Java | Laisser un commentaire

Tiens, voilà longtemps que je n’avais pas écris un nouveau billet ! Depuis Noël en fait. Qu’importe, me voilà de retour pour un billet sur Android ! Voilà une erreur avec laquelle j’ai dû découdre l’autre jour :

res\layout\main.xml:0: error: Resource entry main is already defined.
res\layout\main.out.xml:0: Originally defined here. ...\workspace\TP-Android\res\layout\main.out.xml:1:
error: Error parsing XML: no element found Error in an XML file: aborting build.

La solution

  • Supprimer le fichier main.out.xml
  • Cliquer sur le fichier de votre Activity principale (pour moi src/package-tp-android/main.java)
  • Relancer l’exécution

Si cela ne fonctionne toujours pas, essayez plutôt :

  • Supprimer le fichier main.out.xml
  • Cleaner le projet (Projet / Clean…) et rafraichir (F5 sur le projet, ou clic droit / Refresh)
  • Relancer l’exécution !

L’explication

Cette erreur est due à la création du fichier main.out.xml qui fait un doublon de nom avec le main.xml et ce fichier est créé si on lance un run à partir du main.xml. Pour éviter l’erreur, il faut donc lancer le run en sélectionnant un fichier Java (de préférence l’Activity principale) et ensuite utiliser l’historique des run.

UTF-8 pour le chinois : il parait que ça marche

Publié dans Java | 2 commentaires

UTF-8
Alors alors, peut-on écrire du chinois avec de l’UTF-8 ? La réponse est : OUI !

Par contre, c’est un chinois simplifié qui ne contient donc pas tous les caractères chinois. Si on ne souhaite pas fricoter avec l’unicode, on peut aussi utiliser son homologue chinois (c’est-à-dire l’équivalent de l’UTF-8 (standard international) version chinoise. Bizarre non ?) : GB18030. Mais la encore, c’est du chinois simplifié. Pour avoir du chinois traditionnel, il faut faire face à Big5 (je trouve que le nom en jette !).

Tout ceci explique pourquoi la classe Locale de Java (qui permet de gérer la langue à utiliser) définit le raccourci : Locale.TRADITIONAL_CHINESE et Locale.SIMPLIFIED_CHINESE.

Pour info, Google.ch utilise l’UTF-8 et après quelques minutes de surf sur des sites chinois (avec une collègue chinoise qui m’a montré tout ça), il y a des sites en UTF-8 et des sites en GB18030.

J’aurai peut-être l’occasion de tester ça d’ici 3 semaines, si c’est le cas je confirmerai ou infirmerai ce billet.

Pour aller plus loin

Tester l’égalité de 2 variables sous Maven

Publié dans Java | Laisser un commentaire

Instinctivement pour tester l’égalité de deux variables sous Maven, moi j’écrirai :

<j:if test="${var1 == var2}">
	<echo message="var1 égale var2" />
</j:if>

Mais visiblement sous Maven, ça ne marche pas comme ça ! Le code suivant renverra un résultat pour le moins aléatoire. Du coup, en réfléchissant et en parcourant la Toile (qui est très pingre à ce sujet), je me suis mis à écrire :
Continuer la lecture

Documentation et tutoriel Hibernate

Publié dans Java | Un commentaire

Hibernate est un framework utilisé en Java EE permettant de gérer ce que l’on appelle la « persistance des objets » dans une base de données.
En français courant : en Java on travaille sur des objets, on réfléchit avec des objets et en général on souhaite pouvoir stocker quelques uns de ces objets quelque part. Pour se faire, on utilise le plus souvent une base de données et celle-ci est rarement une BDD* objet (car trop compliqué, pas performant et patati et patata) mais plutôt une BDD relationnelle (c’est-à-dire : non objet). Hibernate permet de faire le lien entre Java et la BDD en facilitant les accès via HQL (d’habitude on utilise le SQL pour accéder à une BDD relationnelle, HQL utilise une syntaxe similaire mais manipule des objets), et surtout en faisant en sorte que Java n’ai qu’à traiter des objets. Bref, Hibernate fait gagner un temps fou au développeur, tout en lui permettant de se concentrer d’avantage sur l’essentiel.

J’ai découvert des documentations et des cours Hibernate 2 et Hibernate 3 sur le « site Internet » de M. Masssat, un enseignant-chercheur à Marseille. Je les consulte de temps en temps et c’est du tout bon.

Et M. Massat fournit aussi quelques autres liens vers des infos sur Tomcat, JSP, … : Le coin des docs… Merci à lui et bonne lecture !

Au passage, dans mon bouquin sur Java EE 5, l’auteur parle de JPA. JPA est apparu avec Java EE 5 et a le même rôle qu’Hibernate sauf qu’il est intégré nativement à Java. Les développeurs de Sun se sont inspirés du travail effectué sur Hibernate (ainsi que d’autres frameworks faisant la même chose) et ont standardisé la chose. A ma connaissance, JPA commence à être utilisé de plus en plus massivement, donc à mon avis, ça vaut le coup de s’y intéresser. J’écrirai peut-être un de ces quatre sur Hibernate ou JPA. (ou les deux)

* BDD = Base De Données

Calculer la durée d’un script ou d’un programme Java

Publié dans Java | Laisser un commentaire

Combien de fois vous est-il arriver de chercher à connaître la durée d’un script, d’une action ou d’un morceau de code ? Franchement, ça m’est arrivé relativement souvent, à tel point d’ailleurs que le code de base que j’ai créé pour démarrer un nouveau projet de site Internet en PHP, affiche par défaut en bas de page le temps de chargement.

En Java, il existe une class nommée Timerdans le package com.ge.tools qui permet de calculer facilement la durée d’un script. Deux méthodes sont à utiliser :

  • getTempsTotal : renvoie la durée en milliseconde depuis la déclaration du Timer
  • getTempsIntermediaire : renvoie la durée en milliseconde depuis le dernier appel à getTempsIntermediaire ou à la déclaration du Timer si aucun appel à getTempsIntermediaire effectué précédement

Dans l’exemple ci-dessous, j’utilise en fait getTempsTotalFormate et getTempsIntermediaireFormate qui renvoie la durée au format plus lisible : h:min:s,ms.

Timer timer = new Timer();
System.out.println("Sleep 1000ms...");
Thread.currentThread().sleep(1000);
System.out.println("Temps intermédiaire 1 : "+timer.getTempsIntermediaireFormate());
System.out.println("Temps total 1 : "+timer.getTempsTotalFormate()); System.out.println("Sleep 1000ms...");
Thread.currentThread().sleep(1000);
System.out.println("Temps intermédiaire 2 : "+timer.getTempsIntermediaireFormate());
System.out.println("Temps total 2 : "+timer.getTempsTotalFormate());

Ce qui affiche au bout de 2s :

Sleep 1000ms…
Temps intermédiaire 1 : 0:0:1,0
Temps total 1 : 0:0:1,0
Sleep 1000ms…
Temps intermédiaire 2 : 0:0:1,0
Temps total 2 : 0:0:2,0