Java выполняет длинную задачу при нажатии кнопки, запуская ее в потоке, а затем выполняет другую задачу после завершенияJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Java выполняет длинную задачу при нажатии кнопки, запуская ее в потоке, а затем выполняет другую задачу после завершения

Сообщение Anonymous »

Итак, у меня есть следующее: при нажатии кнопки я хочу выполнить длительную задачу обработки, но я хочу, чтобы графический интерфейс постоянно обновлялся. И затем ПОСЛЕ завершения задачи обработки - я хочу запустить другой метод в конце того же нажатия кнопки
Мой текущий код выглядит примерно так:

Код: Выделить всё

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
}
Это предотвращает зависание графического интерфейса и корректно обновляет метку. Проблема в последней части — функции nextDuulate(). Очевидно, это не ждет поток и выполняется немедленно при нажатии кнопки до завершения какой-либо обработки, от чего это зависит.
Я попробовал добавить перед этим t1.join(), но затем интерфейс зависает, как если бы я не использовал какой-либо поток, и метка тоже не обновляется.
Я не очень хорошо разбираюсь в Java. Как мне это решить?

Подробнее здесь: https://stackoverflow.com/questions/798 ... task-after
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»