2 Stimmen

Fortschrittsdialog im SwingWorker

Ich habe eine Methode register(), die sehr viel Zeit in Anspruch nimmt. Also habe ich sie in doInBackGround() von swingworker platziert. In der Zwischenzeit möchte ich einen Dialog anzeigen, der modal ist und eine unbestimmte Fortschrittsanzeige hat.

private void registerPopupItemActionPerformed(java.awt.event.ActionEvent evt) {                                                  
    // TODO add your handling code here:
    WaitDialog dialog = new WaitDialog(new javax.swing.JFrame(), true);
    dialog.addWindowListener(new java.awt.event.WindowAdapter() {

    });
    dialog.setVisible(true);
    SwingWorker worker = new SwingWorker() {

        @Override
        protected Object doInBackground() throws Exception {
            register();
            return 0;
        }
    };
    dialog.dispose();   
}

Aber alles friert ein. Im Debugger sehe ich, dass regester() nicht aufgerufen wird. Wo habe ich es vermasselt? Für jede Hilfe wäre ich dankbar! Danke!

5voto

Hovercraft Full Of Eels Punkte 280443

Ihr dialog.dispose wird nach dem Aufruf von setVisible(true) in der modal Dialog, so dass dispose niemals aufgerufen werden kann. Stattdessen sollte dispose im done Override im SwingWorker aufgerufen werden und execute im SwingWorker aufgerufen werden antes de Aufruf von setVisible(true) für das Dialogfeld.

Etwa so (Achtung, Code nicht getestet):

private void registerPopupItemActionPerformed(java.awt.event.ActionEvent evt) {                                                  

    WaitDialog dialog = new WaitDialog(new javax.swing.JFrame(), true);
    dialog.addWindowListener(new java.awt.event.WindowAdapter() {

    });
    SwingWorker worker = new SwingWorker() {

        @Override
        protected Object doInBackground() throws Exception {
            register();
            return 0;
        }

        @Override
        protected void done() {
            dialog.dispose();
        }
    };
    worker.execute();
    dialog.setVisible(true);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X