【发布时间】:2018-05-16 15:24:07
【问题描述】:
我有一个 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 的容器。问题是进度条显示无限时间,并且没有在文本区域打印任何内容。
你能帮我解决这个问题吗? 谢谢
【问题讨论】:
-
请查看编辑以回答并询问是否有任何问题
标签: java swing concurrency jdialog jprogressbar