我有MainProgramWindow GUI。這個GUI有一些變量和一個按鈕調用Sql類的createExcel方法,並同時啓動進度條。Java進度條上傳
public class MainProgramWindow extends javax.swing.JFrame {
package AgentStatGenerator;
//Rest of code.
class Sql {
//Rest of code.
public int newvalueforpbar = 0;
SwingProgressBarExampleOLD2 progressbar = new SwingProgressBarExampleOLD2();
public void createExcel() {
try{
//Rest of code.
stmt = con.createStatement();
rs1 = stmt.executeQuery(query1);
while (rs1.next()) {
HSSFRow row2 = sheet.createRow((short) index);
Cell cell100 = row2.createCell((short) 0);
cell100.setCellValue(rs1.getString(1));
cell100.setCellStyle(stylersinfo);
Cell cell101 = row2.createCell((short) 1);
cell101.setCellValue(rs1.getInt(2));
cell101.setCellStyle(stylersthousand);
Cell cell102 = row2.createCell((short) 2);
cell102.setCellValue(rs1.getDouble(3));
cell102.setCellStyle(stylersdouble);
index++;
newvalueforpbar = 50;
progressbar.updateBar(newvalueforpbar);
}
rs2 = stmt.executeQuery(query2);
while (rs2.next()){
HSSFRow row3 = sheet.createRow((short) index);
Cell cell103 = row3.createCell((short) 0);
cell103.setCellValue(rs2.getString(1));
cell103.setCellStyle(stylersinfo);
Cell cell104 = row3.createCell((short) 1);
cell104.setCellValue(rs2.getInt(2));
cell104.setCellStyle(stylersthousand);
Cell cell105 = row3.createCell((short) 2);
cell105.setCellValue(rs2.getDouble(3));
cell105.setCellStyle(stylersdouble);
index++;
newvalueforpbar = 100;
progressbar.updateBar(newvalueforpbar);
}
catch(Exception ex){
JOptionPane.showMessageDialog(null, ex.toString());
}
}
}
}
private void createExcelButonActionPerformed(java.awt.event.ActionEvent evt) {
Sql sql1 = new Sql();
SwingProgressBarExampleOLD2 progressbar = new SwingProgressBarExampleOLD2();
progressbar.startProgress();
sql1.createExcel();
}
}
我SwingProgressBarExampleOLD2類
package AgentStatGenerator;
import java.lang.reflect.Constructor;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
/**
*
* @author Lacrymae_Ev
*/
public class SwingProgressBarExampleOLD2 extends JPanel {
JProgressBar pbar;
static final int MY_MINIMUM = 0;
static final int MY_MAXIMUM = 100;
public SwingProgressBarExampleOLD2() {
// initialize Progress Bar
pbar = new JProgressBar();
pbar.setMinimum(MY_MINIMUM);
pbar.setMaximum(MY_MAXIMUM);
// add to JPanel
add(pbar);
}
public void updateBar(int newValue) {
pbar.setValue(newValue);
}
public void startProgress() {
final SwingProgressBarExampleOLD2 it = new SwingProgressBarExampleOLD2();
JFrame frame = new JFrame("ProgressBar");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setContentPane(it);
frame.pack();
frame.setVisible(true);
}
}
我,當我在MainProgramWindow GUI,sql1.createExcel()按createExcelButon方法成功地eecuted,開始也正在我的進度條出現。但是隻有progresbar的jframe沒有填充bpar,並且等到sql1.createExcel()完全完成。
當sql1.createExcel()完全完成並在定義的位置下創建excel文件時,進度條jframe填充了pbar但bar沒有進展。但我用進度欄feedbar.updateBar(newvalueforpbar);在每個聲明結束之後。 P:如果我從我的按鈕刪除pbar調用,我的程序工作成功,並創建與所需格式的Excel文件。我的問題是進度條餵養。
在此先感謝。
首先感謝。我在javacreed網站閱讀文章。真的很好的文章。我從根本上開始理解邏輯。但是,我的英語是不夠的有時:(你可以給一個示例代碼多個結果集從任何數據庫檢索和進步pbar兩次?謝謝。 – Lacrymae
@Lacrymae我添加了一個簡單的例子 – nachokk
我模擬你的例子在我的項目,但是當我調用doInBackground();從butoon動作開始,主要gui仍然是不負責任的,我用這種方式調用方法; worker workerstart = new Worker(); try { .getLogger(MainProgramWindow.class.getName()).log(Level.SEVERE,null,ex); } – Lacrymae