[英]Why doesn't the progress bar progress?
调用以下函数来移动进度条,但我不知道为什么直到其他进程都正常工作后它才会移动。
private void startProgressBar() {
signInProgressBar.setMinimum(0);
signInProgressBar.setMaximum(10);
Runnable r = new Runnable() {
@Override
public void run() {
int p = 1;
while(!loginCompleted) {
signInProgressBar.setValue(p);
//System.out.println(p);
p++;
try {Thread.sleep(5000);}catch(Exception exc) {}
}
}
};
new Thread(r,"progress_bar_thread").start();
}
调用startProgressBar
代码startProgressBar
:
startProgressBar(); // CALL
String username = usernameTextField.getText();
String password = new String(passwordField.getPassword());
Openfire server = new Openfire();
boolean isConnected = server.connect(username,password);
if(isConnected) {
// Stash the username and password
User user = new User();
user.setUsername(username);
user.setPassword(password);
// Stop the progress bar
loginCompleted = true;
// Display the next window
UserGUI blab = new UserGUI();
blab.setVisible(true);
this.dispose(); // Dispose off the login window
}
可能是什么问题呢 ?
所有这些东西:
Openfire server = new Openfire();
boolean isConnected = server.connect(username,password);
if(isConnected) {
// Stash the username and password
User user = new User();
user.setUsername(username);
user.setPassword(password);
// Stop the progress bar
loginCompleted = true;
// ....
...应该在后台线程上完成,尤其是在与服务器连接和交互时,否则,您将束缚Swing事件线程以及整个GUI。 也可以将SwingWorker用于后台线程,并只需设置其值即可通过PropertyChangeListener轻松地跟随JProgressBar。
while(!loginCompleted) {
signInProgressBar.setValue(5);
//System.out.println(p);
p++;
try {Thread.sleep(5000);}catch(Exception exc) {}
}
您犯了一个小错误signInProgressBar.setValue(5); 应该是ignInProgressBar.setValue(p);
当前代码在启动时会生成一个空条,然后立即将其设置为50%,没有语句在登录完成后继续执行。
您可能需要repaint
并使它们invalidate
。
尝试
signInProgressBar.invalidate();
signInProgressBar.repaint();
以及为什么将signInProgressBar.setValue
始终设置为signInProgressBar.setValue
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.