Announcement

Collapse
No announcement yet.

GUI aktuallisiert sich erst nach abarbeitung !?! Hilfe!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • GUI aktuallisiert sich erst nach abarbeitung !?! Hilfe!

    Hallo!

    Ich hab ein Problem bei meiner akutellen Java Entwicklung.
    Und zwar hat mein Programm ein GUI in dem verschiedene Daten
    angezeigt werden. Beispielsweise werden E-mail abgerufen und
    sollen in einem Textfenster angezeigt werden. Das Problem ist nun
    das obwohl ich nach jeder E-mail den neuen Text in das Textfenster
    dazufüge, wird erst nach abrufen aller Mails das GUI aktualisiert!?
    Ich versteh das nicht wirklich, habe jetzt jedoch mitbekommen das
    es wohl etwas mit invokeLater beim aufrufen der GUI am anfang des
    Programmes zu tun hat. Vielleicht kann mir jemand von euch helfen
    bzw. erklären warum und wieso das so ist.

    Hier zum Code:

    Aus der Main.java rufe ich die folgende Funktion in der NewJFrame.java
    auf:

    Code:
    public void wakeUp () {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new NewJFrame().setVisible(true);
                }
            });
        }
    Nun hat sich die Grafische Oberfläche geöffnet und ich tue alle weiten
    abarbeitungen direkt durch die auf die Oberfläche gesetzten Buttons
    steuern.

    Wie könnte ich denn nun beispielswese eine For-Schleife, die ich
    über einen Button starte in jedem durchlauf eine Textbox aktuallisieren
    lasse. Den Code würde ich quasi folgendermaßen schreiben:

    Code:
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
         for(int i=0; i < 100; i++) {
               textbox.setText(i);
         }
    }

    Bei meiner Methode würde einfach am ende eine hundert in der textbox
    stehen. Wie kann ich aber die aktive arbeit zu sehen bekommen?
    (Das der Rechner in dem Beispiel mit der for Schleife zu schnell arbeitet
    als das ich es sehen könnte ist mir klar!)

    Ich danke euch und hoffe auf viele Antoworten
    icima

  • #2
    die Aktionen in der callback-Medhode sollten so kurz wie möglich sein da sonst das UI blockiert wird (z.B. nur eine Statusvariable setzen).

    oder du startest einen neuen Thread.
    also so:

    Code:
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)
    {   
    	new Thread()
    	{		      
    		public void run() 
    		{		   	 
    			   
    			for(int i=0; i < 100; i++) 
    			{
    				textbox.setText(String.valueOf(i));
    
    			}
    		}
    	}.start();	  
    }
    wobei im Falle von Swing die Änderung noch in einen SwingUtilities.invokeLater(new Runnable() {... eingekapselt werden sollte.

    Gruss

    Comment

    Working...
    X