私のモーダルJDialogに少し問題があります。コードがバックグラウンドで実行されている間に(ファイルをダウンロードする)、ダイアログを更新して、ユーザーが現在の状態を確認できるようにしたい。そのダウンロードは正常ですが、ダイアログを更新していません...助けてください!私は間違いを見つけることができません。 :モーダルJDialogが更新されない
コードスニペットC:
JDialog dialog = new JDialog(parentFrame, "Element download...", true);
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
dialog.setResizable(false);
dialog.getContentPane().setLayout(new BorderLayout());
JPanel panel = new JPanel();
panel.setBorder(new EmptyBorder(5, 5, 5, 5));
panel.setPreferredSize(new Dimension(300, 100));
panel.setLayout(null);
dialog.add(panel);
final JLabel label = new JLabel("Starting download...");
label.setBounds(new Rectangle(0, 0, 300, 20));
label.setHorizontalTextPosition(JLabel.CENTER);
panel.add(label);
final JProgressBar bar = new JProgressBar(0, 118);
bar.setBounds(new Rectangle(20, 0, 300, 80));
panel.add(bar);
dialog.pack();
dialog.setLocationRelativeTo(parentFrame);
new Thread(new Runnable() {
@Override
public void run() {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
// Executin some code (that works fine)
bar.setValue(value);
label.setText(text);
System.out.println(text);
dialog.dispose();
}
});
}
}).start();
dialog.setVisible(true);
ファイルをダウンロードするコードはどこですか?スレッド内のすべてのコードは、Event Dispatchスレッドで実行されます。また、スレッドを開始する前にJDialogを表示する必要があります。 –
なぜコードが必要でしょうか?私は非常に長いので、私はそれを切った。スレッドを実行する前にJDialogを表示するように設定すると、JDialogが他のアクションをブロックしているため、ダイアログが閉じるまでスレッドは実行されません。 – Nicolas