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

SWT/JFace Java Discussion :

insertion image/icône dans appli


Sujet :

SWT/JFace Java

  1. #1
    Membre confirmé
    Avatar de sroux
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 516
    Points
    516
    Par défaut insertion image/icône dans appli
    Bonjour,

    Via Eclipse je souhaiterais insérer une image/icône (en haut à gauce) de mon appli.
    J'utilise l'assistant d'Eclipse dans l'onglet properties qui me génère le code suivant (j'ai bien un répertoire img/ avec une icône à l'intérieur):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sShell.setImage(new Image(Display.getCurrent(), getClass().getResourceAsStream("/img/FilesText.ico")));
    Résultat:
    Quand je compile et affiche mon appli via Eclipse pas de problème en revanche une fois l'appli jarée j'ai les erreurs suivantes:
    Exception in thread "main" java.lang.IllegalArgumentException: Argument cannot be null
    at org.eclipse.swt.SWT.error(SWT.java:3358)
    at org.eclipse.swt.SWT.error(SWT.java:3297)
    at org.eclipse.swt.SWT.error(SWT.java:3268)
    at org.eclipse.swt.graphics.ImageLoader.load(ImageLoader.java:125)
    at org.eclipse.swt.graphics.ImageDataLoader.load(ImageDataLoader.java:22
    )
    at org.eclipse.swt.graphics.ImageData.<init>(ImageData.java:328)
    at org.eclipse.swt.graphics.Image.<init>(Image.java:545)

    Je me suis penché la définition du chemin du répertoire /img/ dans le MANIFEST mais sans succès...

    Une idée?

    Merci d'avance!

    SR

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Août 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2006
    Messages : 218
    Points : 305
    Points
    305
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sShell.setImage(new Image(Display.getCurrent(), getClass().getResourceAsStream("/img/FilesText.ico")));
    Alors d'abord il y a un problème : toute ressource doit être libérée sous SWT,
    ce qui signifie que ton objet image doit être instancié en dehors de setImage,
    et doit être libéré.

    Voici un bout de code qui marche avec les jar et la source locale :

    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
    141
    142
    143
    144
     
    public final class FileToolBox {
     
          private static final ClassLoader CL = FileToolBox.class.getClassLoader();
     
        /**
         * Renvoie un flux sur un fichier désigné par son nom de ressource.
         * 
         * @param res Nom de ressource
         * @return le flux sur le fichier designé
         */
        public static InputStream ressourceToInputStream(String res) {
            String fileName = ressourceToFileName(res);
            // cas où res n'est pas une ressource : il s'agit peut-être d'un emplacement physique
            if (fileName == null) {
                return getInputStream(res);
            }
            return getInputStream(fileName);
        }
     
     
        /**
         * Cette méthode convertit une ressource en nom de fichier.
         * 
         * @param res la ressource à convertir
         * @return la ressource sous forme de nom de fichier
         */
        public static String ressourceToFileName(final String res) {
            URL url = getResourceURL(res);
            if (url != null) {
                if (url.toExternalForm().startsWith("jar:")) {
                    return url.toExternalForm();
                } else {
                    String temp =urlToFile(url).getAbsolutePath(); 
                    return temp==null?null:replace( temp, "%20", " ");
                }
            } else {
                return null;
            }
        }
     
        /**
         * Construit une URL en s'aidant du classLoader. Les ressources URL sont définit dans la racine du "package"
         * 
         * @param paramRes le nom de la ressource
         * @return l'URL associée
         */
        public static URL getResourceURL(final String paramRes) {
            String res;
            URL url = null;
            // Les ressources ne peuvent pas commencer par "/"
            if (paramRes.startsWith("/")) {
                res = paramRes.substring(1, paramRes.length());
            } else {
                res = paramRes;
            }
     
            try {
                url = CL.getResource(res);
            } catch (Exception e) {
                if (log.isDebugEnabled()) {
                    log.debug("Impossible de trouver la ressource: " + res);
                }
            }
            return url;
        }
     
     
        /**
         * Convertit une URL en un objet File.
         * 
         * @param url l'URL à convertir
         * @return un descripteur de fichier, ou NULL
         */
        private static File urlToFile(final URL url) {
            final String externalForm = url.toExternalForm();
     
            if (externalForm.startsWith("file:")) {
                final String path = externalForm.substring(5, externalForm.length());
                final File f = new File(path);
                if (f == null) {
                    System.err.println("URL NULL !");
     
                }
                return f;
            }
            return null;
        }
     
     
        /**
         * Charge un fichier dans un flux.
         * 
         * @param entree Nom du fichier
         * @return Le flux correspondant à ce fichier
         */
        public static InputStream getInputStream(String entree) {
            if (entree.startsWith("jar:")) {
                URL url;
                try {
                    url = new URL(entree);
                    return url.openStream();
                } catch (MalformedURLException e) {
                    throw new RuntimeException(e);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
     
            } else {
                try {
                    return new FileInputStream(entree);
                } catch (FileNotFoundException e) {
                    throw new RuntimeException(e);
                }
            }
        }
     
     
        /**
         * Remplace toutes les occurences d'une chaîne dans une autre chaîne
         * @param string La chaîne à modifier
         * @param pattern La chaîne à remplacer
         * @param newPattern La chaîne remplacée
         * @return La chaîne modifiée
         */
        public static String replace(final String string, final String pattern, final String newPattern) {
            int index;
     
            if (string == null) {
                return null;
            }
     
            final StringBuffer buffer = new StringBuffer(string);
            final StringBuffer buffer1 = new StringBuffer(string);
     
            while ((index = buffer1.toString().indexOf(pattern)) > 0) {
                buffer.replace(index, index + pattern.length(), newPattern);
                buffer1.replace(index, index + pattern.length(), " ");
            }
            return buffer.toString();
        }
     
     
    }
    Et le code d'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    final Image img = new Image(Display.getCurrent(), FileToolBox.ressourceToInputStream("/img/FilesText.ico"));
    sShell.setImage(img);
    sShell.addDisposeListener(new DisposeListener() {
     
                public void widgetDisposed(DisposeEvent arg0) {
                    img.dispose();
     
                }});
    Bon courage,

    Laurent

    Laurent

  3. #3
    Membre confirmé
    Avatar de sroux
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 516
    Points
    516
    Par défaut
    Salut Meddle,

    Merci pour l'info et les bouts de codes - je vais m'y pencher.

    En revanche je trouve cela ABSURDE de pondre autant de code pour un truc aussi basique - c'est vraiment un truc de PSYCHOPATHES...

    >> vivement une simplification du langage

    Bonne journée.

    SRoux

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Août 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Août 2006
    Messages : 218
    Points : 305
    Points
    305
    Par défaut
    Citation Envoyé par sroux
    Salut Meddle,
    En revanche je trouve cela ABSURDE de pondre autant de code pour un truc aussi basique - c'est vraiment un truc de PSYCHOPATHES...
    C'est peut-être pour cela que je suis fan de Java

  5. #5
    Membre confirmé
    Avatar de sroux
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Avril 2003
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 159
    Points : 516
    Points
    516
    Par défaut
    Je veux bien te croire... mais pourquoi se prendre autant la tête pour un truc aussi simple à 1ère vu (cf VB, VB.NET etc... sans vouloir comparer).

    Bref cela a du en dégouter plus d'un!

    Bonne journée,

    SR.

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

Discussions similaires

  1. Insertion image JPEG dans graphique 3D
    Par Grinche dans le forum MATLAB
    Réponses: 2
    Dernier message: 29/05/2007, 17h47
  2. Insertion d'icône dans un choix multiple
    Par groupe51 dans le forum Java ME
    Réponses: 4
    Dernier message: 12/01/2007, 10h41
  3. [VBA-E] insertion images existante dans le classeur
    Par Ania dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 27/03/2006, 23h50
  4. [VB6] Problème avec insertion d'icônes dans menu
    Par marsup54 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/03/2006, 21h38

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