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

Interfaces Graphiques en Java Discussion :

SplashScreen qui n'affiche rien ?


Sujet :

Interfaces Graphiques en Java

  1. #1
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut SplashScreen qui n'affiche rien ?
    Bonjour

    j'ai fait une classe toute simple de SplashScreen pour mon application, mais ca affiche un gros rectangle blanc à la place de l'image que je voudrais afficher...

    Je ne sais pas si ca vient de la manière dont je charge l'image, ou alors de la manière dont je construis.

    Voici mon code :

    Appell du splashScreen :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ImageIcon icon = null;
        	try {
        		URL url = Main.class.getClassLoader().getResource("images/SplashScreen.jpg");
    			BufferedImage image = ImageIO.read(url);
    			icon = new ImageIcon(image);
    		} catch (IOException e1) {
    			e1.printStackTrace();
    		}
     
    JSplash splash = new JSplash(icon );
    JSplash :

    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
    public class JSplash extends JWindow{
    	private static final long serialVersionUID = 4476349156686881476L;
     
    	//Image de fond
    	private ImageIcon icon = null;
     
    <div style="margin-left:40px">//Dimensions de l'écran</div>	private Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
     
    	public JSplash(ImageIcon icon){
    		super();
     
    		this.icon = icon;
     
    		build();
    	}
     
    	private void build(){
    		int width = icon.getIconWidth();
    		int height = icon.getIconHeight();
     
    		this.setAlwaysOnTop(true);
    		this.setVisible(true);
    		this.setLocation((screen.width-width)/2, (screen.height-height)/2);
    		this.setSize(width, height);
    		this.getContentPane().add(new JLabel(icon));
    	}
     
    	public void dispose(){
    		icon = null;
    		super.dispose();
    	}
    }
    L'erreur doit être toute bête, mais je vois pas ce que c'est

  2. #2
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    j'aurais fait le setVisible après le setSize :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	private void build(){
    		int width = icon.getIconWidth();
    		int height = icon.getIconHeight();
    		
    		this.setAlwaysOnTop(true);
    		
    		this.setLocation((screen.width-width)/2, (screen.height-height)/2);
    		this.setSize(width, height);
    		this.getContentPane().add(new JLabel(icon));
                    this.setVisible(true);
    	}
    mais bon, t'as surement déjà essayé
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  3. #3
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Sinon essayes d'appeler ton splash dans l'event dispatch Thread => d'en faire un thread car tu dois surement réaliser d'autres traiteents qui monopolisent la JVM.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Non, j'avais pas essayé, mais ca change rien. Ma fenêtre affiche quelque chose, mais elle affiche une zone blanche, alors que je voudrais qu'elle affiche mon image...

  5. #5
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Sinon tu fais le gros bourrin comme tout le monde et tu dessine ton image sur un panel que tu mettras dans ta JWindow avec un setContentPane(), en plus ça bouffera moins que d'utiliser un ImageIcon + un JLabel
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  6. #6
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par sinok
    Sinon essayes d'appeler ton splash dans l'event dispatch Thread => d'en faire un thread car tu dois surement réaliser d'autres traiteents qui monopolisent la JVM.
    Je viens d'essayer de le mettre dans un thread mais ca change rien, par contre, si j'emploie invokeLater(monThread), ca affiche bien quelque chose, mais après mon interface, donc je plus le fermer...

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    créer un séquenceur sur lequel ta JWindow se renseignera pour connaître le moment ou elle doit se fermer?
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  8. #8
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par sinok
    Sinon tu fais le gros bourrin comme tout le monde et tu dessine ton image sur un panel que tu mettras dans ta JWindow avec un setContentPane(), en plus ça bouffera moins que d'utiliser un ImageIcon + un JLabel
    Je viens d'essayer la méthode bourrin, mais ca ne marche pas mieux... J'ai toujours une fenêtre toute blanche qui arrive à la place de l'image tant attendue.

  9. #9
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Bon voilà quelquechose qui marche (tu devras surement faire quelques adatations, mais bon dans l'ensemble ...)
    :

    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
     
    import java.awt.Dimension;
    import java.awt.Frame;
    import java.awt.GraphicsConfiguration;
    import java.awt.Image;
    import java.awt.Window;
    import java.net.MalformedURLException;
    import java.net.URL;
     
    import javax.swing.JFrame;
    import javax.swing.JWindow;
    import javax.swing.SwingUtilities;
     
    import org.jdesktop.swingx.JXImagePanel;
    import org.jdesktop.swingx.JXPanel;
     
    public class MySplash extends JWindow {
    	public MySplash(URL url) {
    		super();
    		initComponents(url);
    		// TODO Auto-generated constructor stub
    	}
     
    	public MySplash(GraphicsConfiguration arg0,URL url) {
    		super(arg0);
    		initComponents(url);
    		// TODO Auto-generated constructor stub
    	}
     
    	public MySplash(Frame arg0,URL url) {
    		super(arg0);
    		initComponents(url);
    		// TODO Auto-generated constructor stub
    	}
     
    	public MySplash(Window arg0,URL url) {
    		super(arg0);
    		initComponents(url);
    		// TODO Auto-generated constructor stub
    	}
     
    	public MySplash(Window arg0, GraphicsConfiguration arg1,URL url) {
    		super(arg0, arg1);
    		initComponents(url);
    		// TODO Auto-generated constructor stub
    	}
     
    	private void initComponents(URL url) {
    		JXImagePanel panel = new JXImagePanel(url);
    		setContentPane(panel);
    	}
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		JFrame f = new JFrame();
    		try {
    			final MySplash splash = new MySplash(new URL("file:///c:/dwn/objet.gif"));
     
    			splash.setSize(new Dimension(600,600));
    			splash.setLocationRelativeTo(null);
    			SwingUtilities.invokeLater(new Runnable(){
     
    				public void run() {
    					// TODO Auto-generated method stub
    					splash.setVisible(true);
    				}}
    			);
    			Thread.sleep(10000);
    			SwingUtilities.invokeLater(new Runnable(){
     
    				public void run() {
    					// TODO Auto-generated method stub
    					splash.setVisible(false);
    				}}
    			);
    			f.setVisible(true);
     
    		} catch (MalformedURLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (InterruptedException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
     
    	}
     
    }
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  10. #10
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Ca marche pas mieux, cette fois j'ai rien qui s'affiche du tout...

    J'ai simplifié ton code ainsi :

    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
    public class MySplash extends JWindow {
    	private static final long serialVersionUID = 1174555404140350304L;
     
    	public MySplash(URL url) {
    		super();
    		initComponents(url);
    	}
     
    	private void initComponents(URL url) {
    		JXImagePanel panel = new JXImagePanel(url);
    		setContentPane(panel);
    		setSize(panel.getWidth(),panel.getHeight());
    		setLocationRelativeTo(null);
    	}
    }
    et je l'appelle ainsi :

    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
    final MySplash splash = new MySplash(getClass().getClassLoader().getResource("images/SplashScreen.jpg"));
     
    		Interface gui = new Interface(choice.getSelectedItem().toString());
     
    		SwingUtilities.invokeLater(new Runnable(){
    			public void run() {
    				splash.setVisible(true);
    			}}
    		);
     
    		gui.setVisible(true);
     
    		SwingUtilities.invokeLater(new Runnable(){
    			public void run() {
    				splash.setVisible(false);
    			}}
    		);
    Je commence à croire que cette appli n'aura pas de splashScreen...

  11. #11
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Louche tout de même, car ce que je t'ai filé marche parfaitement ici, ce ne serait pas ton appli qui serait trop rapide à s'ouvrir?
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  12. #12
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par sinok
    Louche tout de même, car ce que je t'ai filé marche parfaitement ici, ce ne serait pas ton appli qui serait trop rapide à s'ouvrir?
    Oui, je suis d'accord, c'est vraiment trop louche...

    Ca dépend de ce que entends par trop rapide, mais c'est vrai qu'elle ne fait pas un temps fou pour s'ouvrir... Elle fait entre 1 et 3 secondes pour s'ouvrir.

  13. #13
    Nouveau membre du Club
    Profil pro
    developeur
    Inscrit en
    Août 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : developeur

    Informations forums :
    Inscription : Août 2004
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    J'ai exactement le meme probleme.
    Existe-il une solution?
    Pour ma part je scan les disques durs a la recherche de fichier avi.
    A chaque fichier la progress bar devrait s'inscrémenter mais cela reste blanc.
    A la fin du traitement, on voit le splash avec l'image et la barre de défillement.
    Sinon existe-t-il une alternative?

    Merci

  14. #14
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par oOoOuuhmAn
    A chaque fichier la progress bar devrait s'inscrémenter mais cela reste blanc.
    A la fin du traitement, on voit le splash avec l'image et la barre de défillement.
    C'est typique d'une application qui utilise l'EDT pour effecuter ses traitements "lourds"...

    Plus d'info : Threads et performance avec Swing par Romain Guy


    [edit] Je te conseillerai de te renseigner que la classe SwingWorker pour ce type de traitement...

    a++

  15. #15
    Nouveau membre du Club
    Profil pro
    developeur
    Inscrit en
    Août 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : developeur

    Informations forums :
    Inscription : Août 2004
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Ok merci bcp je suis entrain de lire

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

Discussions similaires

  1. [MySQL] Base de donnée qui n'affiche rien
    Par Prince Mch dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 31/01/2008, 17h36
  2. ImageList qui n'affiche rien
    Par blastou dans le forum C#
    Réponses: 5
    Dernier message: 28/08/2007, 19h16
  3. Créer un environnement qui n'affiche rien
    Par xiourf dans le forum Mise en forme
    Réponses: 5
    Dernier message: 27/05/2007, 18h59
  4. Programme qui n'affiche rien
    Par Premium dans le forum OpenGL
    Réponses: 2
    Dernier message: 03/12/2006, 22h43
  5. [LG]Programme qui n'affiche rien
    Par ousunas dans le forum Langage
    Réponses: 4
    Dernier message: 17/02/2004, 20h38

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