【发布时间】:2020-05-10 18:45:09
【问题描述】:
我有一个名为CreateAccount 的函数。我需要它运行并且还需要显示一个进度条。当我单击按钮时,该方法将启动。我需要开始显示加载进度条。一旦方法完成,进度条也应该停在 100。如果方法有更多时间来完成工作,进度条也需要慢慢加载。
我尝试使用以下代码,但它没有与方法同步进度条。那我该怎么做呢?
这是我的代码:
private static int t = 0;
private void createAccountBtnActionPerformed(java.awt.event.ActionEvent evt) {
progressBar.setValue(0);
progressBar.setStringPainted(true);
new Thread(new Runnable() {
@Override
public void run() {
//CreateAccount();
for (t = 0; t <= 100; t++) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
CreateAccount();
progressBar.setValue(t);
}
});
try {
java.lang.Thread.sleep(100);
}
catch(InterruptedException e) { }
}
}
}).start();
}
【问题讨论】:
-
Thread.sleep() 不能从 Swing 事件调度线程 (EDT) 使用。使用 Swing
Timer。 -
@AJNeufeld 根据上面的例子,OP 在他们正在创建的新
Thread的上下文中使用Thread.sleep -
@MadProgrammer 好点。我的甜酒增强解析器解析错误。还以为是在
invokeLater()。 -
1) 为了尽快获得更好的帮助,edit 添加minimal reproducible example 或Short, Self Contained, Correct Example。 2) 请学习常见的 Java 命名法(命名约定 - 例如
EachWordUpperCaseClass、firstWordLowerCaseMethod()、firstWordLowerCaseAttribute,除非它是UPPER_CASE_CONSTANT)并始终如一地使用它。
标签: java swing methods event-dispatch-thread jprogressbar