Java - 进度条没有进展
Java - Progress Bar Not Progressing
所有编码运行s,我唯一的问题是进度条不显示值变化。我设置了值,但如果我 运行 它设置的值,则不会显示在进度条上。 (栏未填满)
public void logIn() {
try {
while (true) {
calculate();
System.out.println(loadingProgress);
if (loadingProgress < 100) {
mGUI.pbLoading.setValue(loadingProgress);
Thread.sleep(random.nextInt(5000) + 100);
} else {
mGUI.pbLoading.setValue(100);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void calculate() {
random = new Random();
loadingProgress = loadingProgress + random.nextInt(9) + 1;
}
计算必须在一个额外的线程中完成。这是因为当前 运行 线程正在阻塞 UI 的重绘,直到计算完成。
问题出在您发布的代码之外。我用你的代码创建了一个工作示例:
package snippet;
import java.util.Random;
public class Snippet {
public class ValueAccepter {
public void setValue(int loadingProgress) {
System.out.println(loadingProgress);
}
}
public class MGUI {
public final ValueAccepter pbLoading = new ValueAccepter();
}
private int loadingProgress;
private Random random;
private MGUI mGUI = new MGUI();
public static void main(String[] args) {
new Snippet().logIn();
}
public void logIn() {
try {
while (true) {
calculate();
System.out.println(loadingProgress);
if (loadingProgress < 100) {
mGUI.pbLoading.setValue(loadingProgress);
Thread.sleep(random.nextInt(5000) + 100);
} else {
mGUI.pbLoading.setValue(100);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void calculate() {
random = new Random();
loadingProgress = loadingProgress + random.nextInt(9) + 1;
}
}
我认为你的 swing-threads 有问题。确保 mGUI.pbLoading.setValue
按预期返回。
你必须使用 SwingWorker
to execute graphical user interface operations and calculations otherwise the event dispatch thread won't be able to repaint. Here 是 Oracle
的进度条演示代码。
所有编码运行s,我唯一的问题是进度条不显示值变化。我设置了值,但如果我 运行 它设置的值,则不会显示在进度条上。 (栏未填满)
public void logIn() {
try {
while (true) {
calculate();
System.out.println(loadingProgress);
if (loadingProgress < 100) {
mGUI.pbLoading.setValue(loadingProgress);
Thread.sleep(random.nextInt(5000) + 100);
} else {
mGUI.pbLoading.setValue(100);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void calculate() {
random = new Random();
loadingProgress = loadingProgress + random.nextInt(9) + 1;
}
计算必须在一个额外的线程中完成。这是因为当前 运行 线程正在阻塞 UI 的重绘,直到计算完成。
问题出在您发布的代码之外。我用你的代码创建了一个工作示例:
package snippet;
import java.util.Random;
public class Snippet {
public class ValueAccepter {
public void setValue(int loadingProgress) {
System.out.println(loadingProgress);
}
}
public class MGUI {
public final ValueAccepter pbLoading = new ValueAccepter();
}
private int loadingProgress;
private Random random;
private MGUI mGUI = new MGUI();
public static void main(String[] args) {
new Snippet().logIn();
}
public void logIn() {
try {
while (true) {
calculate();
System.out.println(loadingProgress);
if (loadingProgress < 100) {
mGUI.pbLoading.setValue(loadingProgress);
Thread.sleep(random.nextInt(5000) + 100);
} else {
mGUI.pbLoading.setValue(100);
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void calculate() {
random = new Random();
loadingProgress = loadingProgress + random.nextInt(9) + 1;
}
}
我认为你的 swing-threads 有问题。确保 mGUI.pbLoading.setValue
按预期返回。
你必须使用 SwingWorker
to execute graphical user interface operations and calculations otherwise the event dispatch thread won't be able to repaint. Here 是 Oracle
的进度条演示代码。