Unter
Progress Bar - Allgemeine Themen, Fragen und Diskussionen - Jabaco - Community
schrieb jemand ein Problem mit Jabaco (ein BASIC-Dialekt für die JavaVM), das auf Java beruht und mich selbst sehr verwundert.
Hier ein Besipielprogramm in Java:
Entscheidend hierbei ist der Teil, wenn der Button gedrückt wurde:
Seine und meine Erwartungshaltung ist, daß erst das Label den Text "Bitte warten" bekommt, dann die Schleife abgearbeitet wird und zuletzt "Ok" ausgegeben wird.
Wenn man das Programm jedoch startet, bleibt das Label zuerst bei seinem alten Text "Hier steht etwas" und arbeitet die Schleife ab. Und am Ende wird ein "Ok" ausgegeben. "Bitte warten" sieht man erst garnicht. Möglicherweise wird es ganz schnel vor den "Ok" auf "Bitte warten" gesetzt, so schnell daß man es nicht sieht.
Die Frage ist: Warum wird die Schleife vorher abgearbeitet, bevor das Label seinen Text auf "Bitte warten" geändert hat? Und wie muß man dieses Programm abändern, damit es macht, was es eigentlich machen sollte?
Ein "label.updateUI();" nach "label.setText("Bitte warten");" hilft übrigens auch nicht weiter.
Grüße
theuserbl
Progress Bar - Allgemeine Themen, Fragen und Diskussionen - Jabaco - Community
schrieb jemand ein Problem mit Jabaco (ein BASIC-Dialekt für die JavaVM), das auf Java beruht und mich selbst sehr verwundert.
Hier ein Besipielprogramm in Java:
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Test extends JFrame implements ActionListener {
JLabel label;
JButton button;
public Test() {
super ("seltsames Java-Verhalten");
JPanel p = new JPanel();
p.setLayout(null);
label = new JLabel("Hier steht etwas");
button = new JButton("Klick mich");
button.addActionListener(this);
label.setBounds(30,30,350,50);
button.setBounds(30,150,420,150);
p.add(label);
p.add(button);
add(p);
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == button) {
label.setText("Bitte warten");
for (int i=0; i<=100000; i++) {
System.out.println(i);
}
label.setText("Ok");
}
}
public static void main(String[] args) {
Test f = new Test();
f.setSize(500,400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
}
}
Entscheidend hierbei ist der Teil, wenn der Button gedrückt wurde:
Java:
label.setText("Bitte warten");
for (int i=0; i<=100000; i++) {
System.out.println(i);
}
label.setText("Ok");
Seine und meine Erwartungshaltung ist, daß erst das Label den Text "Bitte warten" bekommt, dann die Schleife abgearbeitet wird und zuletzt "Ok" ausgegeben wird.
Wenn man das Programm jedoch startet, bleibt das Label zuerst bei seinem alten Text "Hier steht etwas" und arbeitet die Schleife ab. Und am Ende wird ein "Ok" ausgegeben. "Bitte warten" sieht man erst garnicht. Möglicherweise wird es ganz schnel vor den "Ok" auf "Bitte warten" gesetzt, so schnell daß man es nicht sieht.
Die Frage ist: Warum wird die Schleife vorher abgearbeitet, bevor das Label seinen Text auf "Bitte warten" geändert hat? Und wie muß man dieses Programm abändern, damit es macht, was es eigentlich machen sollte?
Ein "label.updateUI();" nach "label.setText("Bitte warten");" hilft übrigens auch nicht weiter.
Grüße
theuserbl