0
我正在使用本質上是文件移動程序的代碼。我試圖做的是在用戶點擊調用文件移動器的提交按鈕後,按鈕的文本將變爲「正在工作」。我有一個基本的理解,爲什麼它不工作時,我只是設置它,但我試圖使用SwingUtilities在後臺調用它。但是,在顯示任何更改之前,它仍然等待方法調用ft.FindSpot完成之後。GUI JButton沒有按時更新
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.");
}
}
});
使用[搖擺工人(https://docs.oracle.com/javase/7/docs/api/javax/swing/SwingWorker.html)做在後臺線程漫長的過程。 [tutorial](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html)顯示了一個示例 – Frakcool
在Swing Events線程上調用了'actionPerformed()'方法。因此,第一個'btnSubmit.setText(「working ...」)'不需要用'invokeLater()'調用。但是'ft.FindSpot'也在Swing Events Thread上運行,基本上阻塞它直到完成,因此也不會發生按鈕的視覺更新。 – cello
@MarshalAlessi這裏是一個[示例](https://stackoverflow.com/questions/42256369/update-jlabel-text-after-opening-jdialog/42256976#42256976)它不是我的答案中的[mcve],但你可能需要問題的代碼並在我提供的答案中使用我的建議。然而在這一刻,我無法提供一個示例,但可以在幾個小時內嘗試。 – Frakcool