Salve ragazzi, ho il seguente problema.
E' parecchi otempo che cerco di risolverlo con scarso successo.
Allora ho creato una piccola applicazione javaSE con componenti swing.
Quando si avvia l'applicazione fa alcuni controlli il che significa che per avviarsi a volte si attende anche 15 20 secondi. Per rendere la cosa più piacevole, vorrei mettere una roba del tipo un'immagine o ppure una gif animata in modo da rendere l'idea all'utente che il programma si sta avviando. Cosa che però non riesco a fare.
Posto un po di codice.
Classe TestaFrame
//metodo main
codice:
public static void main(String[] args){
mainflasj = new SplashScreenMain();
mainflasj.start();
creaShowAndGui();
}
nel metodo creaShowAndGui ad un certo punto quando finisce di eseguire tutte le operazioni io metto il seguente comando
codice:
mainflasj.stop();
classe SlashScreenMain.
codice:
package PanelIniziale;
import javax.swing.UIManager;
import javax.swing.ImageIcon;
public class SplashScreenMain extends Thread{
SplashScreen screen;
boolean variabile = true;
public void run() {
// initialize the splash screen
splashScreenInit();
}
private void splashScreenDestruct() {
screen.setScreenVisible(false);
}
private void splashScreenInit() {
ImageIcon myImage = new ImageIcon("immagine.jpg");
screen = new SplashScreen(myImage);
screen.setScreenVisible(true);
}
}
classe SplashScreen
codice:
package PanelIniziale;
import javax.swing.*;
import java.awt.*;
public class SplashScreen extends JWindow {
BorderLayout borderLayout1 = new BorderLayout();
JLabel imageLabel = new JLabel();
JPanel southPanel = new JPanel();
FlowLayout southPanelFlowLayout = new FlowLayout();
JProgressBar progressBar = new JProgressBar();
ImageIcon imageIcon;
public SplashScreen(ImageIcon imageIcon) {
this.imageIcon = imageIcon;
try {
jbInit();
}
catch(Exception ex) {
ex.printStackTrace();
}
}
// note - this class created with JBuilder
void jbInit() throws Exception {
imageLabel.setIcon(imageIcon);
this.getContentPane().setLayout(borderLayout1);
southPanel.setLayout(southPanelFlowLayout);
southPanel.setBackground(Color.BLACK);
this.getContentPane().add(imageLabel, BorderLayout.CENTER);
this.getContentPane().add(southPanel, BorderLayout.SOUTH);
southPanel.add(progressBar, null);
this.pack();
}
public void setProgressMax(int maxProgress)
{
progressBar.setMaximum(maxProgress);
}
public void setProgress(int progress)
{
final int theProgress = progress;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progressBar.setValue(theProgress);
}
});
}
public void setProgress(String message, int progress)
{
final int theProgress = progress;
final String theMessage = message;
setProgress(progress);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
progressBar.setValue(theProgress);
setMessage(theMessage);
}
});
}
public void setScreenVisible(boolean b)
{
final boolean boo = b;
SwingUtilities.invokeLater(new Runnable() {
public void run() {
setVisible(boo);
}
});
}
private void setMessage(String message)
{
if (message==null)
{
message = "";
progressBar.setStringPainted(false);
}
else
{
progressBar.setStringPainted(true);
}
progressBar.setString(message);
}
}
Il problema è questo quando avvio l'applicazione, viene visualizzata l'immagine, ma l'applicazione risulta esser emolto lenta, ed inoltre non refrescia la schermata in quanto l'immagine anche quando il thread lo interrompo cmq continua ad essere in pagina e non viene caricata l'interfaccia grafica iniziale
dove sbaglio??
Grazie a tutti