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

Java ME Discussion :

Quid de la validité de mon constructeur?


Sujet :

Java ME

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    741
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 741
    Par défaut Quid de la validité de mon constructeur?
    Bonjour,

    Pour faciliter la gestion d'éléments de mon Canvas graphique, j'ai créé un tout bête (pour l'instant) constructeur SvgImage.

    Bien que je ne pense avoir rien oublié, mon code génère une NullPointerException lors du rendu.

    Comme je n'ai rien changé d'autre que mon constructeur et qu'avant cela, mon script ne retournait pas d'erreur, j'imagine qu'il doit en être la cause mais je ne vois pas en quoi.

    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
    import java.io.IOException;
    import java.io.InputStream;
     
    import javax.microedition.lcdui.*;
    import javax.microedition.m2g.SVGAnimator;
    import javax.microedition.m2g.SVGEventListener;
    import javax.microedition.m2g.SVGImage;
    import javax.microedition.m2g.ScalableGraphics;
    import javax.microedition.midlet.*;
     
    import org.w3c.dom.*;
    import org.w3c.dom.svg.*;
     
     
    public class MyApp extends MIDlet{
    	private SvgCanvas canvas;
        public MyApp(){
        }
        public void startApp(){
    		canvas=new SvgCanvas("logo",this);
            Display.getDisplay(this).setCurrent(canvas);
        }
        public void pauseApp(){
        }
        public void destroyApp(boolean unconditional){
        }
    }
    class SvgCanvas extends Canvas{
        protected SvgImage svgImage;
        protected ScalableGraphics sg=ScalableGraphics.createInstance();
    	private static String img;
    	private static MIDlet midlet;
        public SvgCanvas(String img,MIDlet midlet){
    		this.setFullScreenMode(true);
    		this.img=img;
    		this.midlet=midlet;
        }
        public void paint(Graphics g){
    		sg.setRenderingQuality(2);
            g.setColor(219,238,255);
            g.fillRect(0,0,getWidth(),getHeight());
            sg.bindTarget(g);
    		svgImage=new SvgImage(img);
    		svgImage.setViewportWidth(getWidth());
    		svgImage.setViewportHeight(getHeight());
    		sg.render(0,0,svgImage);
    		sg.releaseTarget();
        }
    }
    class SvgImage extends SVGImage{
    	public SvgImage(String img){
    		try{
    			this.createImage((InputStream)getClass().getResourceAsStream("/"+img+".svg"),null);
    		}
    		catch(Exception e){
    		}
    	}
    }
    Pourriez-vous m'éclairer, svp?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 122
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Dans le catch du constructeur de SvgImage vous devriez affiché un message, ou du moins, comme tout le monde, le printStrace.
    Car là ... si vous avez une exception, elle vous sera invisible, si elle est vraiment là ... cela explique votre null pointeur exception pour la suite.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    741
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 741
    Par défaut
    Il n'y a pas d'exception levée à la création de l'image (j'ai testé)

  4. #4
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    741
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 741
    Par défaut
    Voici le code commenté :

    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
    import java.io.IOException;
    import java.io.InputStream;
     
    import javax.microedition.lcdui.*;
    import javax.microedition.m2g.SVGAnimator;
    import javax.microedition.m2g.SVGEventListener;
    import javax.microedition.m2g.SVGImage;
    import javax.microedition.m2g.ScalableGraphics;
    import javax.microedition.midlet.*;
     
    import org.w3c.dom.*;
    import org.w3c.dom.svg.*;
     
    public class MyApp extends MIDlet{
    	private SvgCanvas canvas;
    	public MyApp(){
    	}
    	public void startApp(){
    		// Création du canevas
    		canvas=new SvgCanvas("logo",this);
    		// Affichage du canevas
    		Display.getDisplay(this).setCurrent(canvas);
    	}
    	public void pauseApp(){
    	}
    	public void destroyApp(boolean unconditional){
    	}
    }
    class SvgCanvas extends Canvas{
    	protected SvgImage svgImage;
    	// Création d'une instance graphique
    	protected ScalableGraphics sg=ScalableGraphics.createInstance();
    	private static String img;
    	private static MIDlet midlet;
        public SvgCanvas(String img,MIDlet midlet){
    		// Affichage du canevas en fullscreen
    		this.setFullScreenMode(true);
    		this.img=img;
    		this.midlet=midlet;
    	}
    	public void paint(Graphics g){
    		// Définition de la qualité du rendu
    		sg.setRenderingQuality(2);
    		// Définition de la couleur du canevas
    		g.setColor(219,238,255);
    		// Définition du background du canevas
    		g.fillRect(0,0,getWidth(),getHeight());
    		// Ajout de l'instance graphique au canevas
    		sg.bindTarget(g);
    		// Création de l'image
    		svgImage=new SvgImage(img);
    		// Définitions des dimensions de l'image
    		svgImage.setViewportWidth(getWidth());
    		svgImage.setViewportHeight(getHeight());
    		// Ajout de l'image au canevas (rendu)
    		sg.render(0,0,svgImage);
    		// Libération de l'instance graphique
    		sg.releaseTarget();
    	}
    }
    class SvgImage extends SVGImage{
    	public SvgImage(String img){
    		try{
    			// Récupération de l'image dans le fichier SVG spécifié
    			this.createImage((InputStream)getClass().getResourceAsStream("/"+img+".svg"),null);
    		}
    		catch(Exception e){
    		}
    	}
    }

  5. #5
    Membre éprouvé
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Par défaut
    Citation Envoyé par Lcf.vs Voir le message
    Il n'y a pas d'exception levée à la création de l'image (j'ai testé)
    Y'en aura une si le fichier svg n'existe pas.

    Et vous n'en saurez rien car vous ne tracez rien dans la clause catch.

    Comme le dit LittleWhite, il faut au minimum mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    e.printStackTrace();
    dans la clause catch du constructeur de la classe SvgImage...

  6. #6
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    741
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 741
    Par défaut
    Oui, j'ai déjà tenté mais pas de message d'erreur retourné... d'où ma réponse à LittleWhite

  7. #7
    Membre éclairé

    Femme Profil pro
    Experte JS / Conseillère en best practices / Chercheuse en programmation
    Inscrit en
    Octobre 2007
    Messages
    741
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Experte JS / Conseillère en best practices / Chercheuse en programmation
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 741
    Par défaut
    Pour ceux qui voudraient faire du testing, voici un fichier SVG hyper basique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
    <svg id="vb" version="1.1" baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="240" height="400" viewBox="0 0 240 400">
    	<rect x="40" y="200" width="160" height="40" rx="10" ry="10" fill="#000" />
    </svg>
    N'oubliez pas de le nommer logo.svg

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 04/04/2008, 00h14
  2. Erreur sur mon constructeur par copie
    Par beegees dans le forum C++
    Réponses: 8
    Dernier message: 02/04/2008, 20h58
  3. je sais pas me servir de mon constructeur
    Par poulette3000 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 04/11/2007, 17h03
  4. [XSD] validité de mon schema
    Par veneto dans le forum Valider
    Réponses: 3
    Dernier message: 17/08/2006, 18h44
  5. [C#] Comment optimiser mon constructeur ?
    Par blbird dans le forum C#
    Réponses: 2
    Dernier message: 19/01/2006, 14h41

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