【发布时间】:2014-02-15 17:49:26
【问题描述】:
我有名为 Worker 的 SwingWorker;
public class Worker extends SwingWorker<Void, Void> {
private MainProgramWindow mpw;
public Worker(MainProgramWindow mpw) {
this.mpw = mpw;
}
public String getStartDate (){
String inputStringDate = mpw.startDateBox.getText();
SimpleDateFormat inputFormat = new SimpleDateFormat("dd.MM.yyyy");
Date inputDate = null;
try {
inputDate = inputFormat.parse(inputStringDate);
} catch (ParseException ex) {
Logger.getLogger(MainProgramWindow.class.getName()).log(Level.SEVERE, null, ex);
}
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd 00:00:00.000");
String outputStringDate = outputFormat.format(inputDate);
return outputStringDate;
}
public String getEndDate (){
String inputStringDate = mpw.endDateBox.getText();
SimpleDateFormat inputFormat = new SimpleDateFormat("dd.MM.yyyy");
Date inputDate = null;
try {
inputDate = inputFormat.parse(inputStringDate);
} catch (ParseException ex) {
Logger.getLogger(MainProgramWindow.class.getName()).log(Level.SEVERE, null, ex);
}
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd 23:59:59.999");
String outputStringDate = outputFormat.format(inputDate);
return outputStringDate;
}
@Override
protected Void doInBackground() throws Exception {
//here you make heavy task this is running in another thread not in EDT
int i = 50;
setProgress(i);
//Rest of code.
ResultSet rs1;
Statement stmt;
String query1 = "select date,id,dur from exampletable\n" +
"where adetdate between '"+getStartDate()+"' and '"+getEndDate()+"'";
rs1 = stmt.executeQuery(query1);
//Rest of Code
while(i <= 100){
setProgress(i++);
Thread.sleep(5); // random magic number
}
return null;
}
}
Worker 成功运行并在定义的位置创建 excel 文件。
我的问题是;当我启动带有 StartDate Chooser - EndDate Chooser - StartJob 按钮的程序 GUI 时。当 Button 单击某个调用的进度条时,进度条执行此 Worker,进度条开始监听。
但是 Worker 总是使用第一个 GUI 出现的 startdate 和 enddate 值。我在 Worker 中定义了两个方法来获取实际的 startdate 和 enddate 值并在 String query1 中使用它们。
为什么 query1 成功调用但无法识别方法 getStartDate() 和 getEndDate() 我不明白。有什么想法吗?
编辑: 我也有进度条的 PbarNEW 类;
package AgentStatGenerator;
//Imports here
public class PbarNEW extends JPanel {
JProgressBar pbar;
public PbarNEW() {
// initialize Progress Bar
pbar = new JProgressBar();
// add to JPanel
add(pbar);
SwingWorker myWorker = new Worker();
myWorker.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(final PropertyChangeEvent event) {
switch (event.getPropertyName()) {
case "progress":
pbar.setIndeterminate(false);
pbar.setValue((Integer) event.getNewValue());
break;
}
}
});
myWorker.execute();
}
public static void main(String args[]) {
final PbarNEW it = new PbarNEW();
JFrame frame = new JFrame("Progress Bar Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(it);
frame.pack();
frame.setVisible(true);
}
}
当我在出现的 MainProgramWindow(主 GUI)progresbar 中单击按钮并开始侦听 Worker。但是 SwingWorker myWorker = new Worker();在 Worker 中创建构造函数后不起作用。
private void createExcelButonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String[] arguments = new String[] {"123"};
PbarNEW.main(arguments);
}
【问题讨论】:
标签: java progress-bar swingworker