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

Applets Java Discussion :

Images non affichées dans applet sur serveur distant


Sujet :

Applets Java

  1. #1
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut Images non affichées dans applet sur serveur distant
    Bonjour à tous !
    Je bute sur un problème apparemment simple:
    J'ai une applet graphique qui fonctionne parfaitement en local avec toutes les versions de windows et la plupart des browsers (explorer, firefox)
    Voici le code:
    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
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
     
    import java.applet.Applet;
    import java.awt.*;
     
    public class SetGenerator extends Applet {
     
        MySet A;
        int Nums[]; // liste des indices des éléments choisis
        int n; // nombre d'éléments
        int wel = 64; // largeur standard des icones
        int hel = 64; // hauteur standard des icones
        MediaTracker tracker;
        Image elepics[];
        String imdir = "PICS/";
        Image offImage;
        Graphics offGraphics;
        int width = 320;// les dimensions de l'écran
        int height = 286;
     
        private int posystring() {
            return height - 20;
        }
     
        private int posxi(int n) {
            return (n / 4) * wel;
        }
     
        private int posyi(int n) {
            return (n % 4) * hel;
        }
     
        private void initimages() {
            for (int i = 0; i < n; i++) {
                elepics[i] = getImage(getDocumentBase(), imdir + MySet.ALL[Nums[i]].filename);
                tracker.addImage(elepics[i], i);
            }
        }
     
        /**
         * Initialization method that will be called after the applet is loaded
         * into the browser.
         */
        @Override
        public void init() {
            // TODO start asynchronous download of heavy resources
            // récupération des paramètres javascript
            // de l'applette
            String nom = getParameter("Nom");
            String strn = getParameter("nbelts");
            //n = 1 + ((int) (Math.random() * 50)) % 20;
            n = Integer.parseInt(strn);
            Nums = new int[n];
            for (int i = 0; i < n; i++) {
                String sei = getParameter(nom + Integer.toString(i));
                int ei = Integer.parseInt(sei);
                Nums[i] = ei;
            }
            // construction de l'objet MySet
            A = new MySet(nom, n, Nums);
            // initialisation des images
            elepics = new Image[n];
            tracker = new MediaTracker(this);
            initimages();
            // fond noir
            setBackground(Color.BLACK);
            // générer l'image en double buffer
            offImage = createImage(width, height);
            offGraphics = offImage.getGraphics();
            paintFrame(offGraphics);
        }
     
        @Override
        public void stop() {
            offImage = null;
            offGraphics = null;
        }
     
        public void paintFrame(Graphics g) {
            for (int i = 0; i < n; i++) {
                g.drawImage(elepics[i], posxi(i), posyi(i), null);
            }
            g.setColor(Color.WHITE);
            Font font = new Font("Arial", Font.PLAIN, 16);
            g.setFont(font);
            g.drawString(A.to_string(), 0, posystring());
        }
        // TODO overwrite start(), stop() and destroy() methods
        @Override
        public void paint(Graphics g) {
            if (!tracker.checkAll(true)) {
                g.drawString("chargement en cours....", 10, 20);
                repaint(100);
                return;
            }
            // recopier le buffer sur l'écran
            paintFrame(offGraphics);
            g.drawImage(offImage, 0, 0, null);
        }
    }
    Si je transporte mon site sur un serveur distant, les images ne s'affichent plus. Aucun message d'erreur! bien au contraire Applet loaded, applet started
    puis écran noir, par contre le texte s'affiche correctement, autrement dit la fin de paintFrame s'exécute, mais pas le début.
    PS: les images danss le sous-répertoire 'PICS' sont accessibles puisqu'elles sont affichées dans la page (hors applet).
    Je soupçonne soit le double-buffer (indispensable pour la fluidité), soit le mediatracker, mais je ne comprends pas pourquoi tout marche parfaitement en local.
    PPS: Sous linux (Ubuntu-Firefox) en local, c'est aléatoire cela peut fonctionner ou ne pas fonctionner.
    Si quelqu'un a une idée.
    Merci

  2. #2
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Help ! Help !
    Je travaille là-dessus depuis plusieurs heures maintenant essayant d'éliminer les causes.
    J'ai éliminé le double buffering.
    En outre, je teste le Mediatracker en phase d'initialisation de l'applet (quitte à bloquer le process).
    Tout se compile, tout marche à merveille en local et toujours aucun affichage sur serveur distant.
    C'est à n'y rien comprendre. Les applets s'exécutent sur le poste client, pas sur le serveur.
    Voici le code simplifié:
    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
    import java.applet.Applet;
    import java.awt.*;
     
    public class SetGenerator extends Applet {
     
        MySet A;
        int Nums[]; // liste des indices des éléments choisis
        int n; // nombre d'éléments
        int wel = 64; // largeur standard des icones
        int hel = 64; // hauteur standard des icones
        MediaTracker tracker;
        Image elepics[];
        String imdir = "PICS/";
        int width = 320;// les dimensions de l'écran
        int height = 286;
     
        private int posystring() {
            return height - 20;
        }
     
        private int posxi(int n) {
            return (n / 4) * wel;
        }
     
        private int posyi(int n) {
            return (n % 4) * hel;
        }
     
        private void initimages() {
            for (int i = 0; i < n; i++) {
                elepics[i] = getImage(getDocumentBase(), imdir + MySet.ALL[Nums[i]].filename);
                tracker.addImage(elepics[i], i);
            }
            try {
                tracker.waitForAll();
            } catch (InterruptedException e) {
            }
        }
     
        /**
         * Initialization method that will be called after the applet is loaded
         * into the browser.
         */
        @Override
        public void init() {
            // TODO start asynchronous download of heavy resources
            // récupération des paramètres javascript
            // de l'applette
            String nom = getParameter("Nom");
            String strn = getParameter("nbelts");
            //n = 1 + ((int) (Math.random() * 50)) % 20;
            n = Integer.parseInt(strn);
            Nums = new int[n];
            for (int i = 0; i < n; i++) {
                String sei = getParameter(nom + Integer.toString(i));
                int ei = Integer.parseInt(sei);
                Nums[i] = ei;
            }
            // construction de l'objet MySet
            A = new MySet(nom, n, Nums);
            // initialisation des images
            elepics = new Image[n];
            tracker = new MediaTracker(this);
            initimages();
            // fond noir
            setBackground(Color.BLACK);
     
        }
     
        // TODO overwrite start(), stop() and destroy() methods
        @Override
        public void paint(Graphics g) {
            for (int i = 0; i < n; i++) {
                g.drawImage(elepics[i], posxi(i), posyi(i), null);
            }
            g.setColor(Color.WHITE);
            Font font = new Font("Arial", Font.PLAIN, 16);
            g.setFont(font);
            g.drawString(A.to_string(), 0, posystring());
     
        }
    }

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    hum... Tu es sur des URL de tes images ?

    Generalement j'utilise plutot getCodeBase() que getDocumentBase().

    Essaye déjà avec un code minimum (une seule image):
    Code java : 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
    public class MyApplet extends Applet {
     
    	URL url = null;
    	Image image = null;
     
    	@Override
    	public void init() {
    		try {
    			MediaTracker mediatracker = new MediaTracker(this);
    			url = new URL(getCodeBase(), "trefle.png"); // FIXME: nom de l'image en dur
    			image = getImage(url);
    			mediatracker.addImage(image, 0);
    			mediatracker.waitForAll();
    		} catch (MalformedURLException e) {
    			e.printStackTrace(); //FIXME: Error Handling
    		} catch (InterruptedException e) {
    			e.printStackTrace(); //FIXME: Error Handling
    		}
    	}
     
    	@Override
    	public void paint(Graphics g) {
    		setBackground(Color.BLACK);
    		g.drawImage(image, 0, 0, null);
    		g.setColor(Color.WHITE);
    		Font font = new Font("Arial", Font.PLAIN, 16);
    		g.setFont(font);
    		g.drawString(url.toString(), 0, image.getHeight(null) + 16);
    	}
    }

    --> résultat ici: MyApplet


  4. #4
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Merci Pseudocode.
    Je vais essayer ça ce soir.
    Je te tiens au courant.

  5. #5
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    J'ai donc adapté mon code:
    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
    import java.applet.Applet;
    import java.awt.*;
    import java.net.MalformedURLException;
    import java.net.URL;
     
    public class SetGenerator extends Applet {
     
        URL url = null;
        MySet A;
        int Nums[]; // liste des indices des éléments choisis
        int n; // nombre d'éléments
        int wel = 64; // largeur standard des icones
        int hel = 64; // hauteur standard des icones
        MediaTracker tracker;
        Image elepics[];
        String imdir = "../PICS/";
        int width = 320;// les dimensions de l'écran
        int height = 286;
     
        private int posystring() {
            return height - 20;
        }
     
        private int posxi(int n) {
            return (n / 4) * wel;
        }
     
        private int posyi(int n) {
            return (n % 4) * hel;
        }
     
        private void initimages() {
            for (int i = 0; i < n; i++)
            {  try{
                    url = new URL(getCodeBase(),imdir + MySet.ALL[Nums[i]].filename ); // FIXME: nom de l'image en dur
                    elepics[i] = getImage(url);
                    tracker.addImage(elepics[i], i);
                    tracker.waitForAll();
                } catch (MalformedURLException e) {
                    e.printStackTrace(); //FIXME: Error Handling
                } catch (InterruptedException e) {
                    e.printStackTrace(); //FIXME: Error Handling
                }
            }
        }
     
        /**
         * Initialization method that will be called after the applet is loaded
         * into the browser.
         */
        @Override
        public void init() {
            // TODO start asynchronous download of heavy resources
            // récupération des paramètres javascript
            // de l'applette
            String nom = getParameter("Nom");
            String strn = getParameter("nbelts");
            //n = 1 + ((int) (Math.random() * 50)) % 20;
            n = Integer.parseInt(strn);
            Nums = new int[n];
            for (int i = 0; i < n; i++) {
                String sei = getParameter(nom + Integer.toString(i));
                int ei = Integer.parseInt(sei);
                Nums[i] = ei;
            }
            // construction de l'objet MySet
            A = new MySet(nom, n, Nums);
            // initialisation des images
            elepics = new Image[n];
            tracker = new MediaTracker(this);
            initimages();
            // fond noir
            setBackground(Color.BLACK);
     
        }
     
        // TODO overwrite start(), stop() and destroy() methods
        @Override
        public void paint(Graphics g) {
            for (int i = 0; i < n; i++) {
                g.drawImage(elepics[i], posxi(i), posyi(i), null);
            }
            g.setColor(Color.WHITE);
            Font font = new Font("Arial", Font.PLAIN, 16);
            g.setFont(font);
            g.drawString(A.to_string(), 0, posystring());
     
        }
    }
    Après ça il ne fonctionne plus ni en local ni en distant ...
    J'ai donc bidouillé et j'ai fini par changer la variable imdir
    en:
    String imdir = "../PICS/";
    au lieu de:
    String imdir = "PICS/";
    Alors là ça fonctionne en local (comme avant) mais toujours pas en distant.
    Je pense donc qu'il s'agit bien d'un problème de chemin qui n'est pas trouvé, bien que les images soient affichées correctement (hors applet) depuis la page qui lance l'applet.
    Toutefois, mon applet ne peut être lancée que par une fonction javascript, je ne peux donc pas déboguer depuis mon EDI (netbeans). Où puis-je récupérer la trace des blocs 'catch' ? Il n'y a rien sur la console java en cours d'exécution.

  6. #6
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    Normalement les erreurs sont affichées dans la console... donc si elle est vide c'est qu'il n y a pas eu d'erreur.

    Ca ne serait pas un simple problème de Minuscule/Majuscule dans tes URL ?

  7. #7
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Pseudocode, t'es vraiment le meilleur.
    MERCI
    C'était bien un pb de case
    Mes fichiers avaient des extensions '.GIF' et dans mon code précédent:
    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
        static int maxelem = 20; // cardinal de l'univers
        static MyElement ALL[] = new MyElement[maxelem]; // l'univers entiers
        // initialisation du tableau contenant tous les éléments
        // il y a 7 cercles, 7 carrés et seulement 6 triangles
        // aucun élément n'est nommé x (générique)
        private void initALL() {
            if (iA) {
                return;
            } else {
                iA = true;
                ALL[0] = new MyElement(0, 'a', 'B', 'B', "bblue_a.GIF");
                ALL[1] = new MyElement(1, 'b', 'B', 'R', "bred_b.GIF");
                ALL[2] = new MyElement(2, 'c', 'B', 'G', "bgreen_c.GIF");
                ALL[3] = new MyElement(3, 'd', 'B', 'Y', "byellow_d.GIF");
                ALL[4] = new MyElement(4, 'g', 'B', 'P', "bpurple_g.GIF");
                ALL[5] = new MyElement(5, 'y', 'B', 'O', "borange_y.GIF");
    j'avais mis par exemple "bblue_a.gif" et ainsi de suite.
    Windozmaniaque ....

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

Discussions similaires

  1. Image non affichée dans le JPanel
    Par coolanso dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 22/02/2011, 09h40
  2. Applet non affiché dans le navigateur
    Par scholes dans le forum Applets
    Réponses: 11
    Dernier message: 29/01/2010, 14h59
  3. Réponses: 2
    Dernier message: 10/10/2008, 15h56
  4. Réponses: 1
    Dernier message: 22/07/2008, 20h12
  5. Google Analytics sur une page non affichée dans un navigateur
    Par Fdescamps dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/06/2007, 08h18

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