我正在做一个在特定文件夹中创建一些Excel文件(.xlsx)的程序,但是GUI出现问题,因为在调用创建该文件的方法时,它冻结了。
我希望在GUI中有一个不确定的进度条,除非有异常和JLabel用来显示创建中的excel文件,否则它不会出错。
MailPanel类:它是接口,当我单击名为“ Generate”的按钮时,调用类GenerateExcel()的方法“ generateExcel”
public class MainPanel extends JPanel {
.....
.....
btnGenerate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jsonFileIssues = ..... ;
jsonFileProject = ..... ;
Project project = ..... ;
key = project.getKey();
category = project.getCategory();
String ruta = "C:\\JIRA\\JIRA-Proyectos\\" + category + "\\";
.....
GenerateExcelExterno gee = new GenerateExcelExterno(jsonFileProject, jsonFileIssues, key, ruta, excelFile);
gee.execute();
.....
}
}
.....
.....
}
GenerateExcel类:生成文件的重要方法
我知道我必须将SwingWorker添加到GenerateExcel类中才能解冻GUI,但是我无法获得它!
该方法创建文档,因此doInBackground可以工作,但是面板中的进度条继续冻结...
public class GenerateExcel extends SwingWorker<Integer, Void> {
String jsonFileProject, jsonFileIssues, key, ruta, excelFile;
public GenerateExcel(String jsonFileProject, String jsonFileIssues,
String key, String ruta, String excelFile) {
super();
this.jsonFileProject = jsonFileProject;
this.jsonFileIssues = jsonFileIssues;
this.key = key;
this.ruta = ruta;
this.excelFile = excelFile;
}
public static void generateExcel(String jsonFileProject, String jsonFileIssues, String key, String ruta, String excelFile) {
.....
.....
.....
}
@Override
protected Integer doInBackground() throws Exception {
// TODO Auto-generated method stub
generateExcelExterno(jsonFileProject, jsonFileIssues, key, ruta, excelFile);
return 100; //for example
}
}
最佳答案
我认为我们提供详细信息的能力受到所提供的有限信息的阻碍,但是问题的要点仅仅是,您需要在控件类ActionListener中设置SwingWorker,然后执行它。在SwingWorker的doInBackground()
方法内部应进行长时间运行的代码调用。不要在doInBackground内部进行任何Swing调用。
一些有用的链接:
JProgressBar without JButton and PropertyChangeListener
Understanding Java ExecutorService:我最喜欢这一点。
Cant get JProgressBar to update from SwingWorker class