フレーム クラス MainFrame と JPanel を拡張するクラス PanelPlan を持つスイング GUI アプリケーションがあります。BufferedReader を使用してテキスト ファイルを 1 行ずつ読み取り、その他の計算を行うことで、テキスト ファイルを操作します。バックグラウンド スレッドで実行されます。また、メインフレームに 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();
}
メインフレーム クラス:
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はメインスレッドに実装する必要があると読みました。私の場合、バックグラウンド スレッドでの作業が完了し、インジケーター ラベルが表示されるように設定する必要があることをメイン スレッドに通知するにはどうすればよいですか?
どうもありがとう!