Thread als kleines splash

Status
Nicht offen für weitere Antworten.

vladoo

Aktives Mitglied
Hi Leute ich möchte folgendes tun.

Habe ne GUI. Nach dem Buttonklick in der GUI wird eine Berechnung gestartet, die eine Weile dauert.

Da möchte ich solange die Berechnung läuft ein kleines splash-Bild in der mitte des Bildschirms plazieren
(Berechnung läuft oder so). Das Programm steht sowieso immer ne Weile.

Wie kann man das am Besten machen? Hat jemand ein guten Beispielcode?

Gruß vladoo
 
Das kannst du z.B. mit einem JFrame machen, bei dem du per setUndecorated(true) Titlezeile etc. ausblendest.
Da kannst du dann z.B. ein Label mit einer Nachricht oder einem Bild einblenden.
 
upps, so genau habe ich die Anforderungen nicht mehr im Kopf 😉
 
Ich meinte, hat jemand ein Code Schnipsel wie ich das mit einem Thread einbinde?

Also ich hab eine Klasse und wenn ich diese instanziere werden einige Parameter, die zum berechnen nötig sind, mit übergeben. Diese Instanzierung dauert halt dann ne Weile, weil er da grad rechnet.

Ich will diese Instanzierung als Thread starten und das JFrame am Bildschirm zeigen, bis die Berechnug fertig ist.
 
> hat jemand ein Code Schnipsel wie ich das mit einem Thread einbinde

Code:
dein Thread-Code ...
starteSplash();
dein weiterer Thread-Code ...

vielmehr kann man da gar nicht sagen, wie ich schon schrieb:
zum Anfang des Anzeigens anzeigen, am Ende des Anzeigens nicht mehr anzeigen,
die Anzeige-Logik ist davon ja unabhängig, die kannst du in einer Operation
starteSplash();
kapseln, evtl. noch mit Parametern, evtl den Rückgabetyp (das Splash-Objekt) irgendwo speichern, um später wieder darauf zuzugreifen
jetzt musst du nur eine Stelle im Code finden, an der diese eine Zeile Code stehen soll,

was stellst du dir da unter einem Code Schnipsel vor?
 
Hallo, ich habe folgenden Code:

Code:
 Thread t = new Thread(new WaitDialog());
            t.start();
                    
            Object BL = getObjectType(1, null); //Diesese Methode dauert ne Weile.

Solange die getObjectType Methode läuft will ich den Splash anzeigen. Ich krieg das voll nich hin.

Mein WaitDialog():


Code:
public class WaitDialog extends javax.swing.JDialog implements Runnable{
    
   
    Wait wa = new Wait();
    
    /** Creates new form WaitDialog */
    public WaitDialog() {
           
      this.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
      this.setResizable(false);
      this.setSize(250, 80);
      
      Dimension d = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); //Bildschirmgröße ermitteln
      double hight = d.getHeight(); //Höhe rausziehen
      int y = (int)((hight/2)-(this.getSize().getHeight()/2)); //Dialog muss in die Mitte des Bildschirms positioniert werden
      double width = d.getWidth(); //Breite rausziehen
      int x = (int)((width/2)-(this.getSize().getWidth()/2));
      this.setLocation(x,y); //Positionieren
      
      this.setUndecorated(true);
      this.setLayout(new GridLayout(1,1));
      this.add(wa);
                 
    }
    public void run() {
        this.setVisible(true);
    }
         
                 
    private class Wait extends javax.swing.JPanel {
    
    public BufferedImage image;
    private int w;
    private int h;    
    private javax.swing.JLabel jLabel1;
    
    /** Creates new form Wait */
    public Wait() {
        
        //Bild einlesen
         try{
            
            URL pic_url = this.getClass().getClassLoader().getResource("spulenberechnung/Bilder/load.gif");
            image = ImageIO.read(pic_url); 
         } 
         catch(IOException ex){
            System.out.println( ex.getMessage() );
         }
        
          w = image.getWidth(null);
          h = image.getHeight(null);
        
        
        jLabel1 = new javax.swing.JLabel();

        setPreferredSize(new java.awt.Dimension(200, 50));
        jLabel1.setFont(new java.awt.Font("Arial", 0, 12));
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
    }
        
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image,0,0,null);
        
    }
      
   }
}

Das Problem liegt glube ich am Zeichnen. Ich dachte wenn ich das splash als Thread starte wird es sofort angezeigt.
Aber es wird erst gezeichnet, wenn die getObjectType schon fertig ist. Ich will wie gesagt, solange die läuft anzeigen.
 
Das habe ich schon versucht, es funktioniert leider nicht.

Das ist irgendwie so: Er Instanziert das Object BL. Dabei werden Berechnungen durchgeführt.
Bei der instanzierung bleibt der hängen bis er fertig ist. Danach gehts weiter und wenn er fertig ist paintet er den splash.
Ich möchte aber, dass er bovor er mit der Instanzierung anfängt das splash repaintet. Wie kann mann das machen?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben