1

プログレスバーを移動するために次の関数が呼び出されますが、他のプロセスが動作するまで移動しない理由がわかりません。

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(); // 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
        }

何が問題なのですか?

4

4 に答える 4

1

このすべてのもの:

    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 を使用し、JProgressBar が PropertyChangeListener を介して簡単に追跡できる値を設定するだけです。

于 2013-10-30T16:46:22.417 に答える
-2

と が必要な場合がrepaintありinvalidateます。

試す

signInProgressBar.invalidate();
signInProgressBar.repaint();

そして、なぜあなたは常に5を設定するのですかsignInProgressBar.setValue

于 2013-10-30T16:24:52.990 に答える