Мой текущий код выглядит примерно так:
Код: Выделить всё
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
}
Я попробовал добавить перед этим t1.join(), но затем интерфейс зависает, как если бы я не использовал какой-либо поток, и метка тоже не обновляется.
Я не очень хорошо разбираюсь в Java. Как мне это решить?
Подробнее здесь: https://stackoverflow.com/questions/798 ... task-after
Мобильная версия