IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Eclipse Java Discussion :

Problème d'exécution du à la version de java


Sujet :

Eclipse Java

  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut Problème d'exécution du à la version de java
    J'ai développé un petit programme qui génère des images avec un graphe dessus représentant le pourcentage d'occupation des différents partages, et dont les données sont issues d'un fichier texte.
    Le programme fonctionne sans aucun problème lorsque je l'exécute depuis Eclipse ou même depuis la console (sous linux Suse). Sauf que ce programme est destiné à tourner dans un crontab sur un serveur afin de générer les images qui sont visibles sur une page html.

    Lorsque j'essaye d'exécuter le .class sur le serveur j'obtiens le message suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Exception in thread "main" java.lang.NoClassDefFoundError: while resolving class: GraphPie
       at java.lang.VMClassLoader.resolveClass(java.lang.Class) (/usr/lib/libgcj.so.5.0.0)
       at java.lang.Class.initializeClass() (/usr/lib/libgcj.so.5.0.0)
       at java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (/usr/lib/libgcj.so.5.0.0)
       at java.lang.Class.forName(java.lang.String) (/usr/lib/libgcj.so.5.0.0)
       at gnu.gcj.runtime.FirstThread.run() (/usr/lib/libgcj.so.5.0.0)
       at _Jv_ThreadRun(java.lang.Thread) (/usr/lib/libgcj.so.5.0.0)
       at _Jv_RunMain(java.lang.Class, byte const, int, byte const, boolean) (/usr/lib/libgcj.so.5.0.0)
       at __gcj_personality_v0 (/soleil/rrdtool/java.version=1.4.2)
       at __libc_start_main (/lib/tls/libc-2.3.4.so)
       at _Jv_RegisterClasses (/soleil/rrdtool/java.version=1.4.2)
    Caused by: java.lang.ClassNotFoundException: java.lang.StringBuilder not found in [file:/usr/share/java/libgcj-3.4.5.jar, file:./, core:/]
       at java.net.URLClassLoader.findClass(java.lang.String) (/usr/lib/libgcj.so.5.0.0)
       at gnu.gcj.runtime.VMClassLoader.findClass(java.lang.String) (/usr/lib/libgcj.so.5.0.0)
       at java.lang.ClassLoader.loadClass(java.lang.String, boolean) (/usr/lib/libgcj.so.5.0.0)
       at _Jv_FindClass(_Jv_Utf8Const, java.lang.ClassLoader) (/usr/lib/libgcj.so.5.0.0)
       at java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (/usr/lib/libgcj.so.5.0.0)
       at _Jv_BytecodeVerifier.verify_instructions_0() (/usr/lib/libgcj.so.5.0.0)
       at _Jv_VerifyMethod(_Jv_InterpMethod) (/usr/lib/libgcj.so.5.0.0)
       at _Jv_PrepareClass(java.lang.Class) (/usr/lib/libgcj.so.5.0.0)
       at _Jv_WaitForState(java.lang.Class, int) (/usr/lib/libgcj.so.5.0.0)
       at java.lang.VMClassLoader.linkClass0(java.lang.Class) (/usr/lib/libgcj.so.5.0.0)
       at java.lang.VMClassLoader.resolveClass(java.lang.Class) (/usr/lib/libgcj.so.5.0.0)
       ...9 more
    La machine sur laquelle je programme tourne avec la version 1.6.0_14 et le serveur lui est avec la version 1.4.2. J'ai essayé de modifier l'environnement de compilation ainsi que d'execution dans eclipse en espérant que cela fonctionne mais le problème persiste.

    J'ai peut être mal fait la manip dans tous les cas si quelqu'un pouvait m'éclairer sur le sujet je serai ravi

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Ton prog ne trouve pas la classe StringBuilder

    Si tu vas là : http://java.sun.com/j2se/1.5.0/docs/...ngBuilder.html

    tu vois que cette classe existe de puis 1.5.

    Tu ne dois pas l'utiliser :p dans ton cas

    Essaie de passer eclipse avec la même jvm que ton serveur pour développer c'est plus simple

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    Le problème est que je n'utilise pas (du moins explicitement) la classe StringBuilder

    Voila une des 3 fonctions qui sont identiques à part les noms qui varient.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    Scanner scanner = null;
     
    DateFormat dateFormatdd = new SimpleDateFormat("dd");	//Date mise au format jj
    DateFormat dateFormatmm = new SimpleDateFormat("MM");	//Date mise au format mm
    DateFormat dateFormatyy = new SimpleDateFormat("yyyy");	//Date mise au format aaaa
     
    String listeDepots = "ailes-soleil antares-soleil cassiopee-soleil cristal-soleil deimos-soleil desirs-soleil diffabs-soleil disco-soleil lucia-soleil mars-soleil metrologie-soleil microfocus-soleil ode-soleil pleiades-soleil proxima1-soleil samba-soleil sixs-soleil smis-soleil swing-soleil tempo-soleil";
    String[] tabDepots = listeDepots.split(" ");	//Séparation des différentes lignes dans un tableau
    int nbLignes = tabDepots.length;	//Nombre d'éléments du tableau
     
    String filePath = "";	//Déclaration du chemin d'accès au fichier à lire
     
    Date date=exploreDate(-1);	//On recule d'un jour pour la génération car acinfo-quota n'est pas généré pour le jour actuel
     
    String dd = dateFormatdd.format(date);	//Obtention du jour
    String mm = dateFormatmm.format(date);	//Obtention du mois
    String yyyy = dateFormatyy.format(date);	//Obtention de l'année
     
    filePath = "../logs/acinfo-quota/" + yyyy + "/" + mm + "/acinfo-quota." + yyyy +"-" + mm + "-" + dd;	//Chemin d'accès du fichier de statistiques
     
    try
    {
    	scanner = new Scanner(new File(filePath));
    }
    catch (FileNotFoundException e) {
    	System.err.println("Chemin d'accès incorect!");
    	e.printStackTrace();
    }
     
    double tabVal[] = new double[nbLignes];	//Tableau stockant les valeurs nous interessant
    String tabNom[] = new String[nbLignes];	//Tableau stockant les noms des partages associées aux valeurs
    // On boucle sur chaque champ detecté
    while (scanner.hasNextLine()){	//On lit le fichier ligne par ligne dans son intégralité
    	String line = scanner.nextLine();	//On passe à la ligne suivante
    	for(int i1=0; i1<nbLignes; i1++)	//On parcourt tous les éléments du tableau
    		if(line.contains(tabDepots[i1])){	//Si la ligne actuelle contient le nom de la ligne que l'on veut
    			line = line.replace(" ", "");	//Supprime tous les espaces
    			line = line.replace("|", " ");	//Remplace les | par des espaces
    			line = line.replace(",", ".");	//Remplace les virgules par des points
    			String tabline[]=line.split(" ");	//Sépare la ligne à chaque espace et stocke les éléments dans un tableau
    			tabVal[i1] = Double.parseDouble(tabline[3]);	//Convertion de String vers un double et stockage dans le tableau
    			tabNom[i1] = tabline[1];	//Stockage dans un tableau
    		}//Fin if	
    }//Fin while
    scanner.close();	//Fermeture du scanner de fichiers
     
    int posX=50;	//Position horizontale du camembert
    int posY=50;	//Position verticale du camembert
     
    int sizeX=200;	//Taille horizontale du camembert
    int sizeY=200;	//Taille horizontale du camembert
     
    double[] bidon = new double[tabVal.length];
    double[] pctbidon = new double[tabVal.length];
    double[] degbidon = new double[tabVal.length];
     
    for(int i=0;i<bidon.length;i++)
    	bidon[i]=tabVal[i];
     
    int total=0;	//Stocke le total des valeurs
     
    for(int i=0;i<bidon.length;i++)	//Calcule la somme de tous les éléments. Cette somme représente 100% des valeurs
    	total+=bidon[i];
     
    for(int i=0;i<bidon.length;i++){
    	pctbidon[i]=(bidon[i]*100)/total;	//Calcul du pourcentage que représentent chacun des éléments
    	degbidon[i]=(pctbidon[i]*360)/100;	//Calcul des angles en degrés qui correspondent aux pourcentages des éléments
    }
     
    int xImage=600;	//Largeur de l'image
    int yImage=350;	//Hauteur de l'image
    BufferedImage image = new BufferedImage(xImage, yImage, BufferedImage.TYPE_INT_RGB);	//Instanciation de l'image
    Graphics2D g2d = image.createGraphics();	//Création du Graphics2D qui permet d'utiliser les fonctions déja faites
    int angleadd = 0;	//Stocke les angles cumulés pour recalculer le prochain segment du camembert
    int anglebase = 0;	//Angle de départ
     
    for(int i=0;i<degbidon.length;i++){	//Tracage du texte indiquant le nom des partages
    	g2d.setColor(Color.WHITE);
    	g2d.drawString(tabNom[i]+": "+(float)pctbidon[i]+"% - "+(int)degbidon[i]+"°", 315, 45+(i*10)+3*i);
    }
     
    for(int i=0;i<degbidon.length;i++){	//Changement des couleurs en fonction de la ligne de lumière	
    	if(tabNom[i].contains("ailes"))
    			g2d.setColor(new Color(0, 0, 255));
    	else if(tabNom[i].contains("antares"))
    			g2d.setColor(new Color(0, 255, 0));
    	else if(tabNom[i].contains("cassiopee"))
    			g2d.setColor(new Color(0, 255, 255));
    	else if(tabNom[i].contains("cristal"))
    			g2d.setColor(new Color(255, 0, 0));
    	else if(tabNom[i].contains("deimos"))
    			g2d.setColor(new Color(255, 0, 255));
    	else if(tabNom[i].contains("desirs"))
    			g2d.setColor(new Color(255, 255, 0));
    	else if(tabNom[i].contains("diffabs"))
    			g2d.setColor(new Color(0, 0, 127));
    	else if(tabNom[i].contains("disco"))
    			g2d.setColor(new Color(0, 127, 0));
    	else if(tabNom[i].contains("lucia"))
    			g2d.setColor(new Color(0, 127, 127));
    	else if(tabNom[i].contains("mars"))
    			g2d.setColor(new Color(127, 0, 0));
    	else if(tabNom[i].contains("metrologie"))
    			g2d.setColor(new Color(127, 0, 127));
    	else if(tabNom[i].contains("microfocus"))
    			g2d.setColor(new Color(127, 127, 0));
    	else if(tabNom[i].contains("ode"))
    			g2d.setColor(new Color(127, 127, 127));
    	else if(tabNom[i].contains("pleiades"))
    			g2d.setColor(new Color(0, 127, 255));
    	else if(tabNom[i].contains("proxima1"))
    			g2d.setColor(new Color(127, 0, 255));
    	else if(tabNom[i].contains("samba"))
    			g2d.setColor(new Color(0, 255, 127));
    	else if(tabNom[i].contains("sixs"))
    			g2d.setColor(new Color(127, 255, 0));
    	else if(tabNom[i].contains("smis"))
    			g2d.setColor(new Color(255, 0, 127));
    	else if(tabNom[i].contains("swing"))
    			g2d.setColor(new Color(255, 127, 0));
    	else if(tabNom[i].contains("tempo"))	//A ne faire que lors du dernier partage
    		if((int)degbidon[i]!=0)	//Si le partage ne vaut pas 0% on change la couleur
    			g2d.setColor(new Color(255, 255, 255));
     
    	if(i==0)
    		g2d.fillArc(posX, posY, sizeX, sizeY, anglebase, (int)degbidon[i]);	//Trace le début du camembert
    	else if(i==degbidon.length-1){
    		g2d.fillArc(posX, posY, sizeX, sizeY, angleadd+anglebase, 360-(angleadd+anglebase));	//Trace la suite du camembert
    	}
    	else
    		g2d.fillArc(posX, posY, sizeX, sizeY, angleadd+anglebase, (int)degbidon[i]);	//Trace la suite du camembert
     
    	if(i==degbidon.length-1){	//Si on est à la fin de la boucle
    		g2d.setColor(new Color(255, 255, 255));
    		g2d.fillRect(300, 35+(i*10)+3*i, 10, 10);	//On Trace le rectangle de légende
    	}
    	else
    		g2d.fillRect(300, 35+(i*10)+3*i, 10, 10);	//On trace le rectangle de légende
     
    	angleadd += (int)degbidon[i];	//Additionne les angles de chaque cadrant un par un
    Je vais voir si il est possible ou pas de mettre à jour java sur le serveur et dans le cas ou ça ne serait pas possible comment faire ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    hum ... l'erreur parle d'une classe GraphPie quelle est elle?

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    C'est la classe ou il y a tout. Je m'explique:
    classe GraphPie{

    Fonction Main{
    Appel aux 3 fonctions
    }

    Fonction drawSoleil
    Fonction drawUsers
    Fonction drawOthers
    Fonction exploreDate

    }

    La classe GrpahPie est une classe publique on ne peut plus simple.

    Les fonctions draw sont celles que j'ai mis dans mon post précédent. Elles sont appelées à la suite dans la fonction main

    La fonction exploreDate c'est une petite fonction utilisées pour remonter d'une journée parce que les fichiers de données sont générés avec 1 jour de retard.

    Je sais c'est pas très POO... :p

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    1. c'est quoi les imports dans ta classe graphPie?
    2. C'est quoi ton process pour déployer sur le server? (si tu compile en 1.6 sur ton poste ça marchera pô )
    3. as tu passé ton eclipse en 1.4.2 ?

    et oui c'est pas très POO mais j'ai vu pire :p, tu essais de respecter des règles de nommage c'est déjà pas mal

  7. #7
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    -Pour les import c'est ca :

    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.Scanner;

    -Sinon pour le déploiement j'ai chopé le .class et c'est tout j'arrive sans problème à l'exécuter même sur une autre machine qui est en 1.6

    -J'ai esssayé en suivant ça: http://wiki.eclipse.org/index.php/Ex...n_Environments en sélectionnant le J2SE 1.4

    EDIT

    Je viens de réellement changer l'environnement d'exécution (je croyais l'avoir fait mais apparement non...) et j'obtiens le message suivant (sous eclipse ce coup ci):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Exception in thread "main" java.lang.UnsupportedClassVersionError: GraphPie (Unsupported major.minor version 50.0)
    	at java.lang.ClassLoader.defineClass0(Native Method)
    	at java.lang.ClassLoader.defineClass(Unknown Source)
    	at java.security.SecureClassLoader.defineClass(Unknown Source)
    	at java.net.URLClassLoader.defineClass(Unknown Source)
    	at java.net.URLClassLoader.access$100(Unknown Source)
    	at java.net.URLClassLoader$1.run(Unknown Source)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClass(Unknown Source)
    	at java.lang.ClassLoader.loadClassInternal(Unknown Source)

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Le lien que tu m'as passé est principalement pour développer des plugins Eclipse, de plus voici un extrait qui à mon avis peut s'appliquer à ton cas :

    If you do not have an exact match for an EE that is specified in one of your bundles but do have a compatible match, you get a warning. Continuing development runs the risk of using API which will not be present at runtime. If you have neither an exact or compatible match, your bundle's project will fail to compile.
    Le mieux : tu vas là : Window > Preferences > Java > Installed JREs > Add ...
    Tu ajoutes là jre qui est sur ton serveur et tu configures ton projet pour qu'il utilise celle là. Normalement une erreur devrait apparaitre :p

  9. #9
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Par défaut
    Je viens de trouver un ancien post qui parle d'un problème similaire http://www.developpez.net/forums/d15...sversionerror/

    Et maintenant sous eclipse je n'ai plus que le message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Exception in thread "main" java.lang.NoClassDefFoundError: java/util/Scanner
    	at GraphPie.drawSoleil(GraphPie.java:63)
    	at GraphPie.main(GraphPie.java:27)
    L'erreur est due au fait que les scanners sont la depuis la 1.5 ...

    Pour régler le problème il fallait bien modifier la version avec laquelle on compile et sinon pour le scanner j'vais essayer de me démerder avec un BufferedReader

    Merci pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'exécution des règles SQWRL en Java
    Par ahlemrhayem dans le forum Général Java
    Réponses: 1
    Dernier message: 18/11/2014, 14h38
  2. [BO 5.1.6] Problème d'exécution sous la version 5.1.6
    Par tux2005 dans le forum Débuter
    Réponses: 6
    Dernier message: 25/09/2009, 11h04
  3. problème d'exécution VC version 6
    Par repulsed dans le forum Visual C++
    Réponses: 1
    Dernier message: 22/05/2007, 12h07
  4. [UBUNTU] Problème d'exécution Java
    Par JohnnyWalk dans le forum Ubuntu
    Réponses: 1
    Dernier message: 31/01/2007, 13h21
  5. [DOM] Problème entre différentes versions de java
    Par scorpiwolf dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 17/03/2005, 11h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo