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

Langage Java Discussion :

Allocation à distance


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut Allocation à distance
    Bonjour,

    je dispose d'une classe image :
    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
     
    public class Image
    {
    	private int width ; // Largeur de l'image
    	private int height ; // Hauteur de l'image
    	private int size ; // Taille totale de l'image = hauteur * largeur
    	short data[][]  ; // Matrice des pixels
     
     
    public Image()
    	{
    	}
     
    public Image(int largeur, int hauteur)
    	{
    	setData(largeur, hauteur) ;
    	}
     
    public void setData(int largeur, int hauteur)
    	{
    	width = largeur ;
    	height = hauteur ;
    	size = largeur * hauteur ;
    	data = new short[hauteur][largeur] ;
    	}
    }

    Je déclare donc une varable Image dans mon main, puis j'appelle une classe contenant la méthode "LireImage" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Image image = null ;
    OutilPGM.LireImage(nom, image) ;
    Dans LireImage je récupère les dimensions de mon image et donc j'alloue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    width = Integer.valueOf(ligne.substring(0, n)).intValue() ;
    height = Integer.valueOf(ligne.substring(n+1)).intValue() ;
     
    System.out.println("Dimension image : " + width + " & " + height) ;
     
    image.setData(width, height) ;
    Mais lorsque je veux utiliser le tableau data, j'ai une erreur de pointeur null !!!

    Est ce que quelqu'un sait pourquoi ???
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Pour être exacte, j'ai un "java.lang.NullPointerException" lorsque j'appelle : image.setData(width, height) ;
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Image image = null ;
    OutilPGM.LireImage(nom, image) ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    image.setData(width, height) ;
    C'est normal ! tu passes une référence null à la méthode LireImage...
    Fais plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    image = OutilPGM.LireImage(nom);
    et dans LireImage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Image image = new Image(width, height);
    return image;

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    j'avais pensé à cette éventualité.
    Disons que je préférais avoir une solution qui ressemble à ce que je faisais en C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int LireImage(char nom[64], Image *image)...
    Et ainsi pouvoir renvoyer un code d'erreur ou de réussite.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Citation Envoyé par ToTo13
    Disons que je préférais avoir une solution qui ressemble à ce que je faisais en C :
    Et ainsi pouvoir renvoyer un code d'erreur ou de réussite.
    Tu ne peux pas renvoyer de valeur via les paramètres en Java : ces derniers sont passés par valeur et non par référence (= "par adresse" en C).
    Pour le code d'erreur, soit :
    • une valeur null en retour de méthode signale un problème
    • ta méthode lève une exception en cas d'erreur

  6. #6
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    je viens de regarder en détail ce qui se passe et c'est dans Image que l'allocation ne se fait pas :
    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
     
    public class Image
    {
    	private int width ; // Largeur de l'image
    	private int height ; // Hauteur de l'image
    	private int size ; // Taille totale de l'image = hauteur * largeur
    	Pixel data[][]  ;
     
    public Image()
    	{
    	}
     
    public Image(int largeur, int hauteur)
    	{
    	setData(largeur, hauteur) ;
    	}
     
    public void setData(int largeur, int hauteur)
    	{
    	width = largeur ;
    	height = hauteur ;
    	size = largeur * hauteur ;
    	data = new Pixel[hauteur][largeur] ;
    	}
    }
    Quand je tape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Image image = new Image(width, height) ;
    System.out.println(image.data[0][0]) ;
    J'obtient un pointeur null !!!

    Pourquoi ?
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  7. #7
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Image image = new Image(width, height) ;
    System.out.println(image.data[0][0]) ;
    Le tableau data est bien alloué mais ses éléments ne sont pas alloués c-à-d que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data[i][j] vaut null pour 0 <= i < width et 0 <= j < height
    Il faut allouer chaque Pixel en i, j.

  8. #8
    Membre émérite Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Par défaut
    Citation Envoyé par ToTo13
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	data = new Pixel[hauteur][largeur] ;
    Cette ligne t'alloue la place memoire pour le tableau ... mais ne le remplit pas. C'est à toi de le remplir manuellement en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ( int i = 0 ; i < hauteur ; i++ )  
        for ( int j = 0 ; j < largeur ; j++ )
            data[i][j] = new Pixel() ;

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

Discussions similaires

  1. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 13h02
  2. Accès à la base de registre windows à distance
    Par xavame dans le forum Sécurité
    Réponses: 4
    Dernier message: 13/07/2005, 15h23
  3. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  4. Allocation de ressources
    Par Eric Pasquier dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/10/2002, 09h19
  5. Réponses: 2
    Dernier message: 06/07/2002, 12h36

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