- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有 MainProgramWindow GUI。该GUI有一些变量和一键调用Sql类的createExcel方法并同时启动进度条。
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中按下createExcelButon时,sql1.createExcel()方法成功执行并开始工作,我的进度条也出现了。但只有进度条的 jframe 未填充 bpar,并等待 sql1.createExcel() 完全完成。
当 sql1.createExcel() 完全完成并在定义的位置创建 Excel 文件时,进度条 jframe 填充了 pbar,但进度条没有进度。但我用progressbar.updateBar(newvalueforpbar);给pbar喂食在每个 while 语句结束之后。
P.S:如果我从按钮中删除 pbar 调用,我的程序将成功运行并创建具有所需格式的 Excel 文件。我的问题是进度条喂食。
提前致谢。
最佳答案
您正在同一线程中执行所有任务The Event Dispatch Thread 。解决这个问题的一个好方法是在单独的线程中执行业务代码,这样就不会阻塞 gui,并且您可以更新 gui,而无需等待业务代码完成。 Swing 提供 SwingWorker类来实现这一点。这里有一个带有进度条的很好的例子。 Swing Worker Example .
了解更多 How to Use Progress Bars .
简单来说,您所做的就是创建一个 swingWorker 子类并重写 doInBackGround()
。
示例:
public class Worker extends SwingWorker<Void, Void> {
@Override
protected Void doInBackground() throws Exception {
//here you make heavy task this is running in another thread not in EDT
int i = 0;
setProgress(i);
// call query 1
while(i < 50){
setProgress(i++);
Thread.sleep(5); // random magic number
}
// then call query 2
while(i <= 100){
setProgress(i++);
Thread.sleep(5); // random magic number
}
return null;
}
}
在您的客户端代码中,您有进度条:
SwingWorker myWorker = new Worker();
myWorker.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(final PropertyChangeEvent event) {
switch (event.getPropertyName()) {
case "progress":
myProgressBar.setIndeterminate(false);
myProgressBar.setValue((Integer) event.getNewValue());
break;
}
}
});
//then to get start you have to use execute()
worker.execute();
关于Java 进度条反馈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21779825/
我以前做过很多关系数据库设计,我认为我对其中一些设计模式有经验......但是,我想不出从哪里开始解决这个问题。 我正在创建一个健身房数据库,它将在“健身房”表中包含基本的健身房信息。 然后我将有另一
大家好,我有时需要从网站上自动执行数据收集任务。有时我需要目录中的一堆 URL,有时我需要一个 XML 站点地图(是的,我知道有很多软件和在线服务)。 无论如何,作为我之前问题的后续,我编写了一个可以
我不明白为什么,但客户端库中似乎没有机制可以为 Windows Azure 表存储并行执行许多查询。我创建了一个模板类,可以用来节省大量时间,欢迎您随意使用它。不过,如果您能将其拆开,并提供有关如何改
每次我的作业中出现这些问题中的一个时,我都会弄错...任何人都可以帮助我理解吗?还是老师的 key 关了? (我没有办法知道,因为我没有得到正确的答案,它只是让我知道我的错误。) Assume x =
我计划参加为期一周的有关该主题的类(class)。我主要参与 Java 项目,并且对 C 和 C++ 也有一定的了解。而且,我有兴趣了解有关并发编程的更多信息,并希望获得有关本类(class)的反馈。
有谁知道提交 C# 4.0 反馈的官方方法,以便 Anders 和他的团队能够获得反馈并能够对提交的内容做出回应? 最佳答案 可能是论坛here ,或(对于错误)connect (他们为 .NET 4
这是我想要实现的示例 - http://home.mcafee.com/default.aspx 我想知道如何让页面右侧的反馈标签/按钮稍微打开而不是完全滑出。然后单击,我想打开一个页面(不是 jqu
我遇到过这样的情况:我有一个托管第三方网站的 iframe。我只需要知道 iframe 已导航到其最终的“成功”url,这样我就可以做出响应。 但是,正如您所知,由于 CORS 安全问题,现代浏览器会
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我使用数据库记录管理构建 JQuery/JS/PHP/mySQL 应用程序,需要在 AJAX 调用、修改后端数据库记录时向用户提供可靠且完整的反馈。恕我直言,问题是 $.ajax success: 和
要检测无效 token ,我应该多久检查一次反馈服务? 我已经使用 APNS 服务实现了一个广播系统。我打开一个连接,发送所有 APNS 消息,然后断开连接。然后我在广播完成后立即打开一个反馈连接,并
是否可以使用 shader toy 在下一帧中访问渲染图像 (GLSL)? 最佳答案 现在他们已经实现了渲染到缓冲区,所以你可以渲染到缓冲区。实际上,如果需要,您最多可以使用四个缓冲区。还有, wat
我在Delphi XE5中开发了一个数据快照服务器。 一个客户端连接到服务器。 一个客户端触发一种方法(比如说Server.ComputeTables)。 服务器正在使用ComputeTables方法
我想改进应用程序中的 AJAX 反馈(在我的模态中发布远程表单后等)。 我已经收到一些很好的反馈,显示了加载动画 $(document).ajaxStart(function(){ $('.l
我能够通过 azure-iot-sdk-python 将消息和报告属性从 iot 集线器发送到模拟设备。现在我想获得从 IoT 中心发送到设备/模块的消息的确认 (success,expired,re
我能够通过 azure-iot-sdk-python 将消息和报告属性从 iot 集线器发送到模拟设备。现在我想获得从 IoT 中心发送到设备/模块的消息的确认 (success,expired,re
我的老板想在反馈表单中添加一个选择表单,要求用户选择他/她的国家/地区。我可以通过以下方式实现这一目标: Select country = form.addItem().addSelect("
如何设置反馈,以便在输入数字时 slider 的值发生变化? JS: $('.catalog-filter-change-price_slider-range').slider({ range:
我有一个 CQRS 解决方案,它在 HTML/JavaScript 应用程序中利用 NServiceBus 和网络 worker 。 我有场景 WebAPI 发送命令 CommandHandler 更
我是一名优秀的程序员,十分优秀!