我有一个带有框架类 MainFrame 和扩展 JPanel 的类 PanelPlan 的摆动 GUI 应用程序。我通过使用 BufferedReader 逐行读取文本文件并进行其他计算来对文本文件进行操作。它在后台线程中完成。我还在 MainFrame 中创建了一个带有 gif 活动指示器的标签。所以,我想做的是让用户点击一个按钮,应用程序在后台读取文件,当它完成时,一个旋转指示器变得可见(或“开始旋转”)。当文件被读取时,应用程序更新某些参数并且活动指示器变得不可见(“停止旋转”)。
这就是我所拥有的:
private void btnAddDepActionPerformed(java.awt.event.ActionEvent evt) {
MainFrame mainFrame = new MainFrame();
mainFrame.setIndicatorVisible(); // Activity indicator starts spinning
new Thread(() ->
{
//... code to read a text file and perform other operations;
// Activity indicator stops spinning
mainFrame.setIndicatorInvisible();
}).start();
}
在 MainFrame 类中:
public MainFrame() {
/* Initialize GUI components */
initComponents();
setIndicatorInvisible();
}
public void setIndicatorVisible()
{
System.out.println("\n\nCHECK ACTIVITY INDICATOR ON\n\n");
lblActivityIndicator.setVisible(true);
}
public void setIndicatorInvisible()
{
System.out.println("\n\nCHECK ACTIVITY INDICATOR OFF\n\n");
lblActivityIndicator.setVisible(false);
}
虽然 println 信息按预期显示在控制台中,但活动指示器永远不可见。我知道它设置正确,因为当我让它持续可见时,指示器正在旋转(尽管在读取文件时不会停止旋转)。
我想知道这是否是我使用的正确方法。我读到 GUI 应该在主线程中实现。在我的情况下,我如何通知主线程后台线程中的工作已经完成并且指示器标签应该设置为可见?
非常感谢!