[英]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.