Bonjour,
Est ce que quelqu'un sait comment recuperer le temps de chargement d'un programme et le relier à un progressbar dans un splash
Bonjour,
Est ce que quelqu'un sait comment recuperer le temps de chargement d'un programme et le relier à un progressbar dans un splash
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 ?
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
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.
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
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.
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/
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); } }
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager