Announcement

Collapse
No announcement yet.

repaint in actionPerformed aufrufen

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

  • repaint in actionPerformed aufrufen

    Hallo,

    ich schreibe eine kleine Anwendung, die ein externes Programm starten soll. In einem Textfeld möchte ich den Status dieses Programmlaufs anzeigen, also bei Start:
    "Programm gestartet. Bitte warten, es kann einige Minuten dauern..."
    und nach Ende des Programms:
    "Programm beendet"

    An dem Start-Button habe ich einen ActionListener mit der actionPerformed-Methode und da das nicht so ganz einfach zu sein scheint, habe ich auch bereits einen Thread dafür:

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // Das Textfeld neu zeichnen
    repaintTextField();

    ResourceMap resourceMap = Application.getInstance(ProgStarterApp.class).getC ontext().getResourceMap(ProgStarterAboutBox.class) ;
    String startFile = resourceMap.getString("Program.StartFile");

    try {
    Process proc = Runtime.getRuntime().exec(startFile);
    proc.waitFor();
    int exitCode = proc.exitValue();
    jTextField2.setText("Programm beendet");

    } catch (Exception ex) {
    ex.printStackTrace();
    }
    }

    private void repaintTextField() {
    Thread thread = new Thread(new Runnable() {
    public void run() {
    jTextField2.setText("Programm gestartet. Bitte warten, es kann einige Minuten dauern...");
    jTextField2.repaint();
    }
    }
    );

    thread.setPriority(Thread.NORM_PRIORITY);
    thread.start();
    }

    Leider funktioniert das aber nicht.
    Könnt ihr mir da noch einen Tipp geben?
    Vielen Dank und schöne Grüße,
    Regina

  • #2
    Leider funktioniert das aber nicht.
    Was funktioniert nicht?
    Christian

    Comment


    • #3
      Der Text

      "Programm gestartet. Bitte warten, es kann einige Minuten dauern..."

      wird nicht in das Feld jTextField2 geschrieben. Das extern gestartete Programm dauert wirklich einen Augenblick und solange bleibt das Feld leer. Nur der Text

      "Programm beendet"

      wird am Ende in das Feld geschrieben.

      Comment


      • #4
        Nutze statt des Thread einen SwingWorker
        Christian

        Comment


        • #5
          Hallo Christian,

          ich habe das Starten des Programms in eine Subklasse des SwingWorkers ausgelagert.
          Das funktioniert ganz prima. Vielen Dank für den Tipp.

          Schöne Grüße,
          Regina

          Comment

          Working...
          X