Label setText

Shooter2k

Erfahrenes Mitglied
Hallo liebes Forum,
ich habe ein kleines Problem beim setzen eines Textes bevor eine bestimmte Methode aufgerufen wird.

Es handelt sich dabei um ein Status-Text in Form eines JLabels.
Beim Button-Klick müsste ein StatusText gesetzt werden bevor die Methode ("einlesen()") aufgerufen wird. Da der Code ja immer von oben nach unten ausgeführt wird wundert es mich, dass der Text nicht gesetzt wird.

Die Methode einlesen() nimmt ein wenig Zeit in Anspruch, daher sollte auch der Status-Text gesetzt werden. Sobald ich den Methodenaufruf auskommentiere, setzt er den Text wieder ganz normal.

Hat jemand eine Idee?

Das ist mein Code:
Code:
JButton btnGet = new JButton("GET");
    btnGet.addActionListener(new ActionListener()
    {
       public void actionPerformed(ActionEvent e)
       {
         
         lblStatusAnzeige.setText("Bücher werden eingelesen...");
         
         
         einlesenFirst();
         
         DefaultTableModel modelNeu = getTableAll();
         
         table.setModel(modelNeu);
         table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
         table.getColumn("Name").setPreferredWidth(590);
         
         //lblAnzTreffer.setText(""+anzahlTreffer);
         lblAnzahl.setText("" + NumberFormat.getInstance().format(anzahlBuecher));
         
         lblStatusAnzeige.setText("Alle Bücher erfolgreich eingelesen!");

       }
    });

Beim Klick auf den Button wird mir nur der Text nach dem einlesen angezeigt. Also "Alle Bücher erfolgreich eingelesen!"

Aber der Status "Bücher werden eingelesen..." wird nicht angezeigt.

Vielen Dank,
für die Hilfe
 

vfl_freak

Premium-User
Moin,

mal davon abgesehen, das sich keine Methode "Einlesen()" sehe .... ;)
Was macht denn die Methode "EinlesenFirst()" ??

Gruß
Klaus
 

Improof

Erfahrenes Mitglied
Hi,

das Problem kann in deinem Fall sein, dass Java bei deiner einlesenFirst() Methode so ausgelastet ist, dass der Swing-Thread gar nicht mehr nachkommt, den Text anzuzeigen. Durch die setText() Methode von deinem Label wird der Text nämlich nur im Model gesetzt, das tatsächliche Anzeigen übernimmt der erwähnte Swing-Thread. Dieser Thread hat allerdings im Gegensatz zu dem, der die einlesenFirst() Methode aufruft, keine hohe Priorität und wird deshalb in deinem Fall erst später ausgeführt - und zwar dann, wenn im Label schon der "Alle Bücher erfolgreich eingelesen!" Text gesetzt ist.

Was du nun tun kannst, ist mit EventQueue zu arbeiten. Die Klasse enthält die zwei statischen Methoden "invokeLater" und "invokeAndWait". Letzteres müsste in deinem Fall dafür sorgen, dass gewartet wird, bis der Code in dem Runnable, dass du "invokeAndWait" übergibst, von der System Event Queue (und damit auch dem Swing Thread) abgearbeitet ist.

Hier hast du mal einen Link dazu: http://openbook.galileocomputing.de...19_026.htm#mjff97f42688ce8483476fd5597042a972
Unter Punkt 19.26.3 ist der Umgang damit genau erklärt.


Alles aber ohne Gewähr, hab das leider selbst auch schon länger nicht mehr verwendet, da ich hauptsächlich mit GWT arbeite ;)

Hoffe ich konnte trotzdem helfen! :)

Gruß
Daniel
 

Improof

Erfahrenes Mitglied
Hi,

also doch mit invokeLater()?
Hmm, naja kommt wohl auf die genaue Implementierung an und wie gesagt, habs ja länger nicht verwendet ;)

Aber schön, dass ich dir den entscheidenden Hinweis geben konnte :)

Gruß
Daniel
 

Neue Beiträge