CardLayoutコンポーネントを備えたJFrameがあります。CardLayoutを使用して、アプリケーション実行のさまざまな瞬間にさまざまなJPanelを切り替えています。ある時点で、SwingWorkerオブジェクトを使用していくつかのXMLファイルを生成しています。今回は、ウィンドウに別のJPanelを表示して、ユーザーに待機するように指示します。このJPanelでは、3つのラベルを切り替えたいと思います。
- JLabel 1は次のようになります:「お待ちください。」
- JLabel 2は次のようになります:「お待ちください。」
- JLabel 3は次のようになります:「お待ちください...」
現在、コードは次のようになっています。
ConvertersWorker.execute();
CLayout.show(Cards, WAIT_PANEL);
Timer t =new Timer(500, new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e) {
WaitPanel.SwitchLabels();
}
});
t.start();
while (!this.finishedConverting)
{
}
//After this im am executing other methods based on the generated XML files
SwingWorkerコード:
SwingWorker<Boolean, Void> ConvertersWorker = new SwingWorker<Boolean, Void>() {
public Boolean doInBackground() {
Boolean result = RunConverters();
return result;
}
public void done() {
try {
finishedConverting = get();
} catch (InterruptedException ex) {
ex.printStackTrace();
} catch (ExecutionException ex) {
ex.printStackTrace();
}
}
} ;
JFrameがブロックされているため、2番目のJPanelも表示されません。whileループのためにブロックされますが、別の方法で実装する方法がわかりません。また、SwingWorkerのdone()メソッドは実行されません。実行された場合、finishedConverting変数はtrueに設定され、whileループは停止します。誰かが私がより良い解決策を見つけるのを手伝ってくれる?