Textlabel verändern mit parallelen Threads

julianpe

Aktives Mitglied
Hallo,

ich möchte in meinem Programm ein Textlabel während eines ausgelagerten Prozesses in einem Thread verändern.

Folgende Systematik verbirgt sich im Programm:
Bei Betätigung des Buttons Start werden nachfolgend einige Threads gestartet.
Den Zustandswechel zwischen den Threads will ich in ein Textlabel anzeigen lassen.

Folgender, teils Pseudocode liegt bereits vor:

Bei Betätigung eines Buttons wird dessen actionListener folgenden Code ausführen:

Java:
packThread pt = new packThread(StrInputPath);
                        pt.start();
                        while (pt.isAlive()==true)
                        {
                            try {
                                Thread.sleep(200);
                            } catch (InterruptedException e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                            }
                        }

Im Anschluss daran sollen dann noch andere, ähnliche Threads ausgeführt werden.

So schaut meine beispielhafte Implementierung des packThread aus:

Java:
class packThread
    extends Thread
    {

        String StrInput = null;
           
        public packThread(String StrInputFile){
            this.StrInput = StrInputFile;
               
        }
        public void run()
        {
           
   
            try {
                 System.out.println("Bilder werden gezippt");
                FolderZiper.zipFolder(StrInput, StrInput+".zip");   
                System.out.println("Bilder wurden gezipp");
             
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           
        }
    }

Mein Ansatz war bisher, dass ich den Statuswechsel direkt im try Abschnitt des jeweiligen Threads vollziehen wollte. So funktioniert es ja schließlich auch mit dem System.out.println, jedoch nicht mit dem setText() Argument meines Labels.

Wie kann ich mein Code dahingehend umbauen, sodass vor und nach jedem Thread-Aufruf das Textlabel verändert werden kann?
 

Thallius

Top Contributor
Müssen must du gar nichts. Du kannst auch mit InvokeLater arbeiten. Aber es wäre halt einfach der sauberere Code einen Swingworker zu nehmen. Ich arbeite zu 99% damit, da man eigentlich immer seinen Code im Hintergrund laufen lassen sollte um das UI nicht zu blockieren.

Lies Dich doch einfach mal in den Swingworker ein statt auf irgendeinen Tip zu hoffen der nur dazu führt das du auch weiterhin schlechten Code produzierst.
 

julianpe

Aktives Mitglied
Hallo nochmal,

ich habe mich jetzt ein wenig in das Thema eingearbeitet und habe meinen Code folgendermaßen aufgebaut:

Java:
public class MainFrame extends JFrame {

public final JLabel lblStatus = new JLabel("");

public static void main(String[] args) {
               
    SwingUtilities.invokeLater(new Runnable() {
              @Override
              public void run() {
                MainFrame frame = new MainFrame();
              }
            });
    }
   
public MainFrame() {
        btnStart.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                zipFileHelper(StrInputPath,StrOutputPath);
                });
}   

public void encryptFileHelper(String StrInputPath,String StrOutputPath)
            {
                zipPicture zp = new zipPicture(StrInputPath, StrOutputPath);
                ef.execute();
            }

class zipPicture extends SwingWorker<Void, Void>
{
    String StrInput = null;
    String StrOutput = null;
    zipPicture(String StrInputPath,String StrOutputPath) {
        this.StrInput=StrInputPath;
        this.StrOutput=StrOutputPath;
    
    }
    public Void doInBackground()
    {
            try {
                zipHandler.zipFiles(StrInput, StrOutput);
            } catch (ExtendedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           
        return null;
    }
   
    protected void done() {


        lblStatus.setText("Zippen beendet");
        System.out.println("Zippen beendet");
         }
}

Das Fenster friert trotzdem weiterhin ein. Ist daran zu erkennen, dass der Start Button nach dem Betätigen weiterhin gedrückt ist. Auch werden die Änderungen im JLabel nicht eingetragen.

Ist denn mein o.g. Ansatz grundsätzlich falsch?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JTextfield Text durch Keylistener verändern AWT, Swing, JavaFX & SWT 4
H JItem während der Programmlaufzeit verändern AWT, Swing, JavaFX & SWT 8
D JButton Form verändern AWT, Swing, JavaFX & SWT 4
ruutaiokwu Swing windowStateChanged macht exakt das Gegenteil beim Verändern der Fenstergrösse AWT, Swing, JavaFX & SWT 3
E wie Schriftfarbe in JEditorPane verändern? AWT, Swing, JavaFX & SWT 10
J SplitPane Aussehen des Divider verändern AWT, Swing, JavaFX & SWT 7
A Swing Fensterinhalt verändern AWT, Swing, JavaFX & SWT 3
R Swing Verändern der Ausrichtung JButton und neu anzeigen AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
A Swing GUI - Button soll Frame verändern AWT, Swing, JavaFX & SWT 4
G JFrame - manuell Größe verändern AWT, Swing, JavaFX & SWT 6
M Textfarbe JButton verändern AWT, Swing, JavaFX & SWT 2
F JavaFX Position von Image angeben/verändern AWT, Swing, JavaFX & SWT 2
D Java Swing, Label lässt sich nicht mit Checkboxen/Knopf verändern AWT, Swing, JavaFX & SWT 2
A JPanel größe verändern AWT, Swing, JavaFX & SWT 4
P JFrame manuell Grösse verändern durch 'mouseDragged' AWT, Swing, JavaFX & SWT 3
M JTabbedPane verändern mit Nimbus Look and Feel AWT, Swing, JavaFX & SWT 1
D JFreeChart range der Y Achse verändern. AWT, Swing, JavaFX & SWT 1
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
A Swing JLabel/JTextField Inhalt mit JSlider verändern AWT, Swing, JavaFX & SWT 12
A JScrollPane - ScrollBar Buttongröße verändern AWT, Swing, JavaFX & SWT 1
I JTable Inhalte löschen ohne den JTable zu verändern! AWT, Swing, JavaFX & SWT 5
S Größe von Panel verändern welches auf anderem Panel sitzt AWT, Swing, JavaFX & SWT 10
B MessageBox Position Verändern AWT, Swing, JavaFX & SWT 8
N MVC - Logik zum Verändern der View AWT, Swing, JavaFX & SWT 8
A Swing Fenstergröße mittels Menü verändern AWT, Swing, JavaFX & SWT 3
S SWT Shell durch Event in der Größe verändern AWT, Swing, JavaFX & SWT 7
S Swing Größe von JLabels verändern sich in einem Panel unterschiedlich AWT, Swing, JavaFX & SWT 6
M Swing XML Datei in JTable darstellen + verändern AWT, Swing, JavaFX & SWT 3
H JFrame in der Laufzeit verändern AWT, Swing, JavaFX & SWT 11
B Schriftgröße allgemein verändern? AWT, Swing, JavaFX & SWT 4
W JLabel-Text ab best. Zeitpunkt nicht mehr verändern AWT, Swing, JavaFX & SWT 2
L Swing Image zur Laufzeit verändern AWT, Swing, JavaFX & SWT 6
O Größe von Komponenten im JFrame manuell verändern AWT, Swing, JavaFX & SWT 2
J Swing jTable verändern AWT, Swing, JavaFX & SWT 29
S SWT Table Größen verändern AWT, Swing, JavaFX & SWT 10
C private Panel anderer Klasse verändern AWT, Swing, JavaFX & SWT 11
Dragonfire Swing Hintergrund aller Komponenten verändern AWT, Swing, JavaFX & SWT 2
H Mit for-schleife die Componenten eines Frames verändern AWT, Swing, JavaFX & SWT 5
C Spielfeld Gitter - Einzelne Zellen verändern AWT, Swing, JavaFX & SWT 18
R JTable Hintergrund der Zeile abhängig von Inhalt einer Zelle verändern AWT, Swing, JavaFX & SWT 3
M Panelinhalt im Programm verändern AWT, Swing, JavaFX & SWT 12
L SWT Button Text verändern AWT, Swing, JavaFX & SWT 16
A Swing Bei größe verändern des Fensters Grafik weg AWT, Swing, JavaFX & SWT 3
S JButton - Hintergrund verändern AWT, Swing, JavaFX & SWT 7
D JPanel nach ein paar sekunden verändern AWT, Swing, JavaFX & SWT 5
E Strichstäke bei einem Kreisbogen verändern AWT, Swing, JavaFX & SWT 3
G Gap zwischen JButton-Rand und JButton-Icon verändern AWT, Swing, JavaFX & SWT 2
G Mauszeiger verändern AWT, Swing, JavaFX & SWT 10
K Image verändern AWT, Swing, JavaFX & SWT 8
S Hintergrundfarbe in einer Spalte der JTable verändern AWT, Swing, JavaFX & SWT 3
G Styling verändern AWT, Swing, JavaFX & SWT 4
A Fenstergrösse soll sich konstant verändern AWT, Swing, JavaFX & SWT 8
G Probleme mit Content bei Null-Layout verändern AWT, Swing, JavaFX & SWT 7
Z TextField aus ActionListener von JButton verändern AWT, Swing, JavaFX & SWT 10
A Jface: Wie Inhalt des Hauptbereichs verändern AWT, Swing, JavaFX & SWT 5
G Pixel ablaufartig verändern AWT, Swing, JavaFX & SWT 5
G Text eines Labels verändern? AWT, Swing, JavaFX & SWT 4
G Spaltenbereite bei JTable verändern AWT, Swing, JavaFX & SWT 2
D Bild nicht sichtbar verändern. AWT, Swing, JavaFX & SWT 8
K InnerFrame Select-Ebene verändern AWT, Swing, JavaFX & SWT 7
& Position eines Fensters nicht verändern AWT, Swing, JavaFX & SWT 8
S Anordnung von Buttons verändern AWT, Swing, JavaFX & SWT 3
zilti Swing-Element verändern AWT, Swing, JavaFX & SWT 13
G Zeichnung verschwindet nach verändern der Fenstergröße. AWT, Swing, JavaFX & SWT 2
A Position des Fensters verändern AWT, Swing, JavaFX & SWT 21
B ToolTip verändern / selbst gestalten AWT, Swing, JavaFX & SWT 3
H JButton Farbe verändern AWT, Swing, JavaFX & SWT 4
G JTabbedPane Inhalt verändern? AWT, Swing, JavaFX & SWT 2
T JScrollbar UI verändern AWT, Swing, JavaFX & SWT 5
L Menu Position verändern? AWT, Swing, JavaFX & SWT 24
T Komponente soll die UIManager-PreferredSize verändern AWT, Swing, JavaFX & SWT 5
M Zeilenabstand einer JTextPane verändern? AWT, Swing, JavaFX & SWT 4
D [JTable] Dateninhalt verändern, sobald editiert wird AWT, Swing, JavaFX & SWT 2
J Auf Button - Druck soll Rechteck Farbe verändern AWT, Swing, JavaFX & SWT 8
K Spaltenbreite von mehreren Tabellen gleichzeitig verändern AWT, Swing, JavaFX & SWT 3
M JScrollPane auf JPanel - Resizing - Größe verändern AWT, Swing, JavaFX & SWT 10
A Problem mit InvokeAndWait - JLabel Text verändern AWT, Swing, JavaFX & SWT 2
F JTextArea aus einer anderen Klasse heraus verändern AWT, Swing, JavaFX & SWT 4
S Grafik Farbwert verändern? AWT, Swing, JavaFX & SWT 8
J JTable / Model Daten verändern AWT, Swing, JavaFX & SWT 5
L Größe von Komponenten im Nulllayout mit der Maus verändern. AWT, Swing, JavaFX & SWT 2
M Aussehen von Label verändern? AWT, Swing, JavaFX & SWT 3
M Buttons verändern AWT, Swing, JavaFX & SWT 7
R Button verändern AWT, Swing, JavaFX & SWT 2
S Columnname dynamisch verändern AWT, Swing, JavaFX & SWT 2
D GUI in JFrame mit invokeLater verändern AWT, Swing, JavaFX & SWT 5
D JPanel Koordinatensystem -> Ursprung verändern. AWT, Swing, JavaFX & SWT 2
B JTree - Reihenfolge der Nodes verändern AWT, Swing, JavaFX & SWT 3
D JSPinner Größe verändern - setSize() funktioniert nicht AWT, Swing, JavaFX & SWT 7
C GUI erstellen und verändern AWT, Swing, JavaFX & SWT 19
S Farbe verändern AWT, Swing, JavaFX & SWT 3
Z JTree UIDefaults verändern, aber wie? AWT, Swing, JavaFX & SWT 2
T Color lässt sich nicht verändern AWT, Swing, JavaFX & SWT 3
M In einem JFrame Menüs & . während der Laufzeit verändern AWT, Swing, JavaFX & SWT 6
D JTable-Größe mit Fenstergröße verändern. AWT, Swing, JavaFX & SWT 4
D JTable - Eingabeverhalten verändern AWT, Swing, JavaFX & SWT 2
D JTable - Textfarbe verändern AWT, Swing, JavaFX & SWT 3
J Border im Header bei JTable verändern AWT, Swing, JavaFX & SWT 3
A Look and Feel einer Anwendung verändern AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben