Announcement

Collapse
No announcement yet.

Form1 wird erst am Ende des Progs angezeigt

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

  • Form1 wird erst am Ende des Progs angezeigt

    Hey folks,

    ich schrebe mit Vis. Studi* eines meiner ersten Java-Progs.
    Ich habe eine einfache Form mit einem edit-Feld indem ich eine
    Variable hochzähle und jeden Schritt ausgeben möchte.
    Gut, mein Programm sieht natürlich etwas komplexer aus, aber
    dies beschreibt das Problem in seiner Grundform.
    (Schicke das komplette Prog auch gern via e-mail zu,
    es war halt etwas zu lang um es hier zu posten)
    Mir vorgeben wurde nach der automatischen Anlage des Projektes mit dem Wizard ein Stückchen Code, wo eine Form erzeugt wird, meinen Code
    habe ich nach "hier bitte ihren Code einfügen" eingefügt.
    Dies sieht dann so aus:

    public CFussball {

    initForm();
    incInt();

    }

    public void inInit(){
    ....
    editFeld1.setText(String.valueOf(beispiel_Int);
    ....
    }

    Ergebnis:
    Die Form1-Maske wird erst angezeigt,
    wenn ich in incInt() meine Zahl bis zu einem Höchstwert (90) hochgezählt habe. Dann steht in dem edit-Feld 90.

    Aber ich möchte das Hochzählen mitverfolgen.
    Ich dachte zuerst, es würde vielleicht zu schnell gehen und habe dann einen (Thread.)sleep eingebaut, mit dem Ergebnis, daß ich diese Zeit mal 89 warten mußte und dann kam die Maske mit dem Endergebnis 90.
    Mit dem Debugger wird auch zuerst die Form und das Editfeld ins Leben gerufen, leider wird die Maske aber nich angezeigt und der Debugger
    schmeißt stets eine Exception ...
    Also, was mache ich falsch ?

    Grüße und Dank, Axel

  • #2
    Hallo!

    Die Aktualisierung erfolgt immer erst am Ende. Man bekommt das nur hin, wenn man die Routine als Thread auslagert und mit SwingUtilities.invokeAndwait bzw. invokeLater das Aktualisieren in die Event-Warteschlange stellt.

    Beispiele dazu findest Du sicher bei Swing/ProgressBar, denn dort läuft es genauso. Wenn Du deine E-Mail-Adresse reinstellst, dann kann ich Dir mal ein bißchen Code zusenden.

    Gruss, Gunte

    Comment


    • #3
      Hi Axel,<p>
      vielleicht hilft Dir dieses Mini-Prog weiter. Mein Tip - zum Lernen von Java ist es nicht schlecht, ab und an ohne grafischen GUI-Builder zu arbeiten, da kriegt man ein besseres Gespuer fuer die Klassenbibiothek.<p>
      <pre>
      import java.awt.*;
      import java.awt.event.*;
      import javax.swing.*;

      public class CFussball extends JFrame {

      private JLabel counter;

      public static void main(String[] args) {

      CFussball myJFrame = new CFussball(); // die GUI initialisieren

      for(int i=1; i<91; i++) {
      myJFrame.setCounter(i);
      try {
      Thread.sleep(250);
      } catch(InterruptedException ex) {
      }
      }
      }

      public CFussball() {
      super("CounterDemo");
      counter = new JLabel("00"); // der Counter
      getContentPane().setLayout(new BorderLayout());
      getContentPane().add(counter, BorderLayout.CENTER);
      pack();
      addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
      System.exit(0);
      }
      });
      setVisible(true);
      }

      public void setCounter(int cnt) {
      counter.setText(Integer.toString(cnt));
      }
      }
      </pre><p>
      MfG Marc

      Comment

      Working...
      X