Я работаю с кодом, который по сути является программой перемещения файлов. Что я пытаюсь сделать, так это то, что после того, как пользователь нажмет кнопку отправки, которая вызывает средство перемещения файлов, текст кнопки изменится на «Работает». У меня есть базовое понимание того, почему это не сработало, когда я просто установил его, но я попытался использовать SwingUtilities, чтобы вызвать его в фоновом режиме. Однако он по-прежнему ждет завершения вызова метода ft.FindSpot, прежде чем отображать какие-либо изменения.
public void actionPerformed(ActionEvent arg0) {
if(!textField.getText().equals(""))
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
btnSubmit.setText("Working...");
}
});
//btnSubmit.setText("Working...");
ft.FindSpot(textField.getText(), comboBox.getSelectedItem().toString(), progressBar);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
btnSubmit.setText("Submit");
}
});
}
else
{
ft.warningMessage("The ISCII textbox cannot be blank.");
}
}
});
actionPerformed()
вызывается в потоке событий Swing. Таким образом, первыйbtnSubmit.setText("working…")
не нужно будет вызывать сinvokeLater()
. Ноft.FindSpot
также работает в потоке событий Swing, по существу блокируя его до тех пор, пока он не завершится, и, следовательно, визуальное обновление кнопки также не может произойти. - person cello   schedule 17.10.2017