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 :

Comment récupérer le temps de chargement d'un programme


Sujet :

Interfaces Graphiques en Java

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Comment récupérer le temps de chargement d'un programme
    Bonjour,
    Est ce que quelqu'un sait comment recuperer le temps de chargement d'un programme et le relier à un progressbar dans un splash

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 998
    Points
    7 998
    Par défaut
    Euh sachant que le temps peut varier d'une fois a l'autre, ca va te servir a quoi en fait ?

    C'est pour quand tu demarre ton programme pour que l'utilisateur sache qd il aura +- fini de demarrer ?

    Ou alors c'est pour arriver a définir le temps qu'il reste a faire sachant ce que l'on a dja fait et cb de temps ca a pris par extrapolation ?

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Ce que je veux dire c que, voila, j'ai développé un programme qui est un peut lourd et au démarrage, il met du tps à apparaitre, donc je veux mettre un splash pendant que le programme principale se charge en memoire et que ce splash se ferme automatiquement quand le programme soit totalement chargé et prêt à etre afficher
    Comme ca, l'utilisateur saura qu'il doit attendre au lieu de double clicker sans cesse

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 998
    Points
    7 998
    Par défaut
    Bah tu mets un splash screen (avec un barre de progression si tu vx qui va de 1 a 100), qd le programme demarre tu l'affiche, tu mets le progress a 0... et durant les differentes etapes du chargement tu change le progress jusqu'a 100 puis tu le rends invisible une fois le travail fini.

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Quels sont ces etapes de chargement?
    Comme le chargement depend de la performance de la machine, si je pose une variable statique (le tps que le progress met pour passer de 0 à 100), ca ne va pas marcher.
    Ne peut on pas lancer le splash et l'application en même tps sur 2 thread different et faire en sorte que le splash se ferme quand l'application pple s'est chargé? juste une idée

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

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

    Informations forums :
    Inscription : Août 2006
    Messages : 4 084
    Points : 7 998
    Points
    7 998
    Par défaut
    Bah les etapes de chargements il n'y a que toi qui peut le dire vu que c'est toi qui l'a programme ton programme ...

    "j'ai développé un programme qui est un peut lourd et au démarrage" donc forcement tu sais ou ca ralentit (chargement de fichier de config, de fichier 3D, de sons, d'images, creation des panel, ... jsais pas) mais aussi quand il a fini son initialisation et que l'user px jouer avec.

    Et oui le chargement depend d'une machine a l'autre, donc tu ne dois rien rajouter comme variable... juste des etapes pdt l'initialisation pour voir une barre avancer.

    Pas besoin d'avoir 2 thread non plus.

    Au debut du programme principale, la premiere chose que tu fais c'est d'afficher le splash screen. (tu le cree et il s'affiche tout seul, a condition d'avoir une petit classe splashscreen qui va bien). Puis tu fait comme avant, et a la fin de l'initialisation tu setvisible(false) le splashscreen.

    Apres tu px rajouter une progressbar dans le splashscreen et faire evoluer celle ci avec une methode genre setProgress dans ta classe du splash screen qui va changer la valeur de la progress bar et demander un repaint.

    Voici un exemple (que j'avais trouvé je ne sais ou a l'epoque) qui pourra t'inspierer eventuelement pour refaire un splashscreen maison.

    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
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.MediaTracker;
    import java.awt.Toolkit;
    import java.awt.Window;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.WindowEvent;
    import java.awt.event.WindowFocusListener;
     
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JWindow;
     
    /** A simple Splash screen. */
    public class Splash extends JWindow implements WindowFocusListener, MouseListener
    {
    	/**
         * 
         */
     
    	private static final long	serialVersionUID	= 1L;
    	protected ImageIcon			im;
     
    	public Splash(JFrame f, String progName, String fileName)
    	{
    		super();
    		// Can't use Swing border on JWindow: not a JComponent.
    		// setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
    		im = new ImageIcon(fileName);
    		this.addMouseListener(this);
    		this.setAlwaysOnTop(true);
    		if (im.getImageLoadStatus() != MediaTracker.COMPLETE)
    			JOptionPane.showMessageDialog(f, "Warning: can't load image " + fileName + "\n" + "Please be sure you have installed " + progName + " correctly", "Warning", JOptionPane.WARNING_MESSAGE);
    		int w = im.getIconWidth(), h = im.getIconHeight();
    		setSize(w, h);
    		UtilGUI.center(this);
     
    	}
     
    	public void windowGainedFocus(WindowEvent e)
    	{
    	}
     
    	public void windowLostFocus(WindowEvent e)
    	{
    		setVisible(false);
    		dispose();
    		System.out.println("wat");
    	}
     
    	public Splash(JFrame f, String progName, ImageIcon mm)
    	{
    		super();
    		this.addMouseListener(this);
    		// Can't use Swing border on JWindow: not a JComponent.
    		// setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
    		im = mm;
    		this.setAlwaysOnTop(true);
     
    		if (im.getImageLoadStatus() != MediaTracker.COMPLETE)
    			JOptionPane.showMessageDialog(f, "Warning: ", "Warning", JOptionPane.WARNING_MESSAGE);
    		int w = im.getIconWidth(), h = im.getIconHeight();
    		setSize(w, h);
    		UtilGUI.center(this);
     
    	}
     
    	@Override
    	public void paint(Graphics g)
    	{
    		im.paintIcon(this, g, 0, 0);
    		g.drawRoundRect(0, 0, getWidth() - 1, getHeight() - 1, 7, 7);
    	}
     
    	public void mouseClicked(MouseEvent arg0)
    	{
     
    	}
     
    	public void mouseEntered(MouseEvent arg0)
    	{
    		// TODO Auto-generated method stub
     
    	}
     
    	public void mouseExited(MouseEvent arg0)
    	{
    		// TODO Auto-generated method stub
     
    	}
     
    	public void mousePressed(MouseEvent arg0)
    	{
    		this.setVisible(false);
    		dispose();
     
    	}
     
    	public void mouseReleased(MouseEvent arg0)
    	{
    		this.setVisible(false);
    		dispose();
     
    	}
     
    }
     
    class UtilGUI
    {
     
    	/** Centre a Window, Frame, JFrame, Dialog, etc. */
    	public static void centre(Window w)
    	{
    		// After packing a Frame or Dialog, centre it on the screen.
    		Dimension us = w.getSize(), them = Toolkit.getDefaultToolkit().getScreenSize();
    		int newX = (them.width - us.width) / 2;
    		int newY = (them.height - us.height) / 2;
    		w.setLocation(newX, newY);
    	}
     
    	/**
             * Center a Window, Frame, JFrame, Dialog, etc., but do it the American
             * Spelling Way :-)
             */
    	public static void center(Window w)
    	{
    		UtilGUI.centre(w);
    	}
     
    	/** Maximize a window, the hard way. */
    	public static void maximize(Window w)
    	{
    		// Dimension us = w.getSize();
    		Dimension them = Toolkit.getDefaultToolkit().getScreenSize();
    		w.setBounds(0, 0, them.width, them.height);
    	}
    }
    sinon y'a ca aussi qui m'a bien servi a l'epoque, je pense avoir tjrs une base dans mon splashscreen actuel : http://gfx.developpez.com/tutoriel/java/swing/splash/

Discussions similaires

  1. [Débutant] Comment savoir le temps de chargement d'un formulaire?
    Par hamza_azerty dans le forum C#
    Réponses: 7
    Dernier message: 03/09/2014, 17h53
  2. Comment réduire le temps de chargement d'une base SQLite dans un dataset?
    Par billybobbonnet dans le forum Accès aux données
    Réponses: 9
    Dernier message: 29/08/2014, 17h39
  3. comment calculer le temps de chargement?
    Par itmak dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 02/07/2009, 16h14
  4. Réponses: 1
    Dernier message: 29/05/2008, 19h15
  5. Réponses: 5
    Dernier message: 12/05/2006, 11h45

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