У меня есть Java-программа, которая загружает текстовый файл в качестве входных данных, читает его содержимое, изменяет некоторые строки и затем печатает результат в текстовое поле.Из-за нескольких секунд, требуемых для этой операции, я хотел бы показать JProgressBar во время этого действия, чтобы проинформировать пользователя о том, что выполняется, и когда действие завершено, закройте диалоговое окно, содержащее JprogressBar, и напечатайте результаты.
Вот код:
JButton btnCaricaFile = new JButton("Load text file");
panel.add(btnCaricaFile);
btnCaricaFile.setIcon(UIManager.getIcon("FileView.directoryIcon"));
btnCaricaFile.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
//JFileChooser choice = null;
final JFileChooser choice = new JFileChooser(userDir +"/Desktop");
int option = choice.showOpenDialog(GUI.this);
if (option == JFileChooser.APPROVE_OPTION) {
final JDialog dialog = new JDialog(GUI.this, "In progress", true);
JProgressBar progressBar = new JProgressBar(0, 100);
progressBar.setIndeterminate(true);
dialog.getContentPane().add(BorderLayout.CENTER, progressBar);
dialog.getContentPane().add(BorderLayout.NORTH, new JLabel("Elaborating strings..."));
dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
dialog.setSize(300, 75);
dialog.setLocationRelativeTo(GUI.this);
Thread t = new Thread(new Runnable() {
public void run() {
dialog.setVisible(true);
File file = choice.getSelectedFile();
lista.clear();
textArea.setText("");
lista = loadFile.openFile(file);
for(int i=0; i<lista.size(); i++) {
textArea.append(lista.get(i)+"\n");
}
dialog.setVisible(false);
}
});
t.start();
}
}
});
Для этой цели я использую JDialog в качестве контейнера для JProgressBar, выполняемого соответствующим потоком.Проблема в том, что индикатор выполнения отображается бесконечно долго и ничего не печатается в текстовой области.
Не могли бы вы помочь мне решить эту проблему?Спасибо