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

  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 070
    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 070
    Billets dans le blog
    143
    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 : 42
    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

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    et le null pointer, il a lieu sur quelle ligne?

  9. #9
    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
    Au niveau du rendu -> render(0,0,svgImage);

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 070
    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 070
    Billets dans le blog
    143
    Par défaut
    Vous etes sur que le svgImage il n'est pas null ? lors de l'appel au render ?
    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.

  11. #11
    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
    Ben, ce code-ci fonctionne, la seule différence, c'est que je ne passe pas par un constructeur

    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
    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
    		try{
    			// Récupération de l'image dans le fichier SVG spécifié
    			svgImage=(SVGImage)SVGImage.createImage((InputStream)getClass().getResourceAsStream("/"+img+".svg"),null);
    		}
    		catch(Exception e){
    		}
    		// Définitions des dimensions de l'image
    		svgImage.setViewportWidth(getWidth());
    		svgImage.setViewportHeight(getHeight());
    		// Ajout de l'image au canevas
    		sg.render(0,0,svgImage);
    		// Libération de l'instance graphique
    		sg.releaseTarget();
    	}
    }
    Mais j'en ai vraiment besoin, de ce constructeur....

  12. #12
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ls svgimage n'est pas null, mais il n'est vraisemblablement pas initialisé correctement, à cause de l'exception qui est cachée.

  13. #13
    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
    Mais quelle exception cachée???

    Si dans mon catch, je mets ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("erreur");
    ça ne retourne pas erreur...

    Pourquoi vous acharner dessus alors que j'ai déjà précisé deux fois qu'il n'y a pas d'erreur de ce côté?

  14. #14
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    on a toujours pas le stacktrace de votre exception principale. A défaut de ça, c'est la seul conclusion qu'on pexu avoir, vous cachez l'exception d'initialisation.

  15. #15
    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
    java.lang.NullPointerException
    at javax.microedition.m2g.ScalableGraphics.render(+107)
    at SvgCanvas.paint(+92)
    at javax.microedition.lcdui.Canvas.callPaint(+85)
    at javax.microedition.lcdui.Display.repaint(+82)
    at javax.microedition.lcdui.Display.registerNewCurrent(+235)
    at javax.microedition.lcdui.Display.access$700(+6)
    at javax.microedition.lcdui.Display$DisplayAccessor.foregroundNotify(+46)
    at javax.microedition.lcdui.Display$DisplayManagerImpl.notifyWantsForeground(+152)
    at javax.microedition.lcdui.Display$DisplayManagerImpl.access$100(+6)
    at javax.microedition.lcdui.Display.setCurrent(+70)
    at MyApp.startApp(+25)
    at javax.microedition.midlet.MIDletProxy.startApp(+7)
    at com.sun.midp.midlet.Scheduler.schedule(+270)
    at com.sun.midp.main.Main.runLocalClass(+28)
    at com.sun.midp.main.Main.main(+80)

  16. #16
    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
    J'vois pas l'intérêt que j'aurai à cacher quoique ce soit alors que je rage de ne pouvoir bosser, depuis près de 20 heures...

  17. #17
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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){
    		}
    	}
    }
    Votre SvgImage n'est absolument pas initialisée. Vous créez dans votre construteur une autre svgImage qui, elle, est bien initialisée, mais vous la jetez tout de suite.

    Bref avec ce constructeur, vous avez deux SvgImage: celle que vous essayez de construire (et qui est vide) et celle qui est bien initialisée (et que vous jetez).


    Vous ne pouvez pas appeler une méthode statique et espérer qu ca va initialiser votre classe courante. La méthode statique crée sa propre instance qu'elle vous retourne (et que vous n'utilisez pas). Le fait que vous mettiez this. devant un méthode statique est trompeur, on a l'impression que ca travaille sur l'instance courante alors que ce n'est pas le cas, le compilateur et/ou l'ide aurait du vous mettre un warning là dessus!

  18. #18
    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
    Honnêtement, je ne pense pas que l'instance soit en cause... je puis me tromper mais voici ce qui me fait penser cela...

    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
    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.Document;
    import org.w3c.dom.svg.*;
     
     
    public class MyApp extends MIDlet implements CommandListener{
        private final Command start=new Command("Start",Command.OK,2);
        private final Command exit=new Command("Exit",Command.EXIT,1);
    	private SvgCanvas canvas;
    	private SVGImage svgImage;
    	private Document doc;
    	private SVGElement logo;
        public MyApp(){
        } 
        public void startApp(){
    		try{
    			svgImage=(SVGImage)SVGImage.createImage((InputStream)getClass().getResourceAsStream("/logo.svg"),null);
    			doc=svgImage.getDocument();
    			logo=(SVGElement)doc.getElementById("logo");
    			logo.setTrait("fill","red");
    			canvas=new SvgCanvas(svgImage);
    			canvas.addCommand(start);
    			canvas.addCommand(exit);
    			canvas.setCommandListener(this);
    		}
    		catch(IOException e){
    			e.printStackTrace();
    		}
            Display.getDisplay(this).setCurrent(canvas);
        }
        public void pauseApp(){
        }
        public void destroyApp(boolean unconditional){
        }
        public void commandAction(Command c,Displayable d){
            if (c==exit){
                destroyApp(false);
                notifyDestroyed();
            }
        }
    }
    class SvgCanvas extends Canvas{
        protected SVGImage svgImage;
        protected ScalableGraphics sg=ScalableGraphics.createInstance();
        protected SvgCanvas(final SVGImage svgImage){
            this.svgImage=svgImage;
        }
        public void paint(Graphics g){
    		sg.setRenderingQuality(2);
            g.setColor(219,238,255);
            g.fillRect(0,0,getWidth(),getHeight());
            sg.bindTarget(g);
            svgImage.setViewportWidth(getWidth());
            svgImage.setViewportHeight(getHeight());
            sg.render(0,0,svgImage);
            sg.releaseTarget();
        }
    }
    Comme vous pouvez le voir, ici, mon image est chargée bien avant la création de l'instance...

  19. #19
    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
    Malgré cela, si je suis dans l'erreur, comment dois-je donc m'y prendre pour rendre mon constructeur opérationnel, svp?

  20. #20
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    et d'après la javadoc, le constructeur de SVGImage est "protected", ce qui signifie que vous n'êtes pas censé l'instancier vous même.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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