Java führt eine lange Aufgabe beim Klicken auf die Schaltfläche in einem Thread aus und führt dann eine andere Aufgabe aJava

Java-Forum
Anonymous
 Java führt eine lange Aufgabe beim Klicken auf die Schaltfläche in einem Thread aus und führt dann eine andere Aufgabe a

Post by Anonymous »

Was ich also habe, ist, dass ich auf Knopfdruck eine lange Verarbeitungsaufgabe haben möchte, aber ich möchte, dass die GUI ständig aktualisiert wird. Und NACHDEM die Verarbeitungsaufgabe abgeschlossen ist, möchte ich am Ende des gleichen Schaltflächenklicks eine andere Methode ausführen
Mein aktueller Code sieht etwa so aus:

Code: Select all

private JLabel lError;

.....

private void updateLabel (String text)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
lError.setText(text);
}
});
lError.repaint();
}

.....

bFind.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e)
{
Thread t1 = new Thread(new Runnable()
{
@Override
public void run()
{
myLongProcessingTask()
}
});

duplicates.clear();
try
{
t1.start();
lError.setText("");     // set it at the end of processing
}
catch (Exception err){}

// Do this after processing
selectedIndex = -1;
nextDuplicate();
}
});

.....

private void myLongProcessingTask()
{
// Do something really heavy in a loop
// Every loop iteration call this:

updateLabel("Some text" + i);     // basically a progress tracking label
}
Dies verhindert, dass die GUI blockiert, und aktualisiert das Label korrekt. Das Problem ist der letzte Teil – die Funktion nextDuplicate(). Dies wartet natürlich nicht auf den Thread und wird sofort auf Tastendruck ausgeführt, bevor die Verarbeitung abgeschlossen ist, wovon es abhängt.
Ich habe versucht, t1.join() davor hinzuzufügen, aber dann hängt die Schnittstelle, als ob ich keinen Thread verwendet hätte, und die Bezeichnung wird auch nicht aktualisiert.
Ich bin nicht sehr gut mit Java. Wie löse ich das?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post