Как создать монитор процесса?

1

Мне нужна ваша помощь в решении проблемы в моем коде. Предполагается, что программа сравнивается с JTables и удаляет все соответствующие записи. Монитор прогресса также должен показывать ход работы. Моя проблема связана с индикатором выполнения. Это действительно не работает должным образом. Мне нужна ваша помощь в решении этого. Ниже приведен мой отрывок из моего кода:

//An inner class
class Task extends SwingWorker<Void, Void> {

    @Override
    public Void doInBackground() {
        int progress = 0;
        setProgress(0);
        while (progress < table2.getRowCount() && !isCancelled()) {
            //Make progress.
            for( int i= 0;i < table2.getRowCount(); i++){
                    progress =i/10;
                    setProgress(progress);
                for(int j= 0;j < table1.getRowCount();j++){
                    //check if reference nos match
                    if((table2.getValueAt(i,4).toString()).equals(getTrimedValueAt(j))){
                         matchedRefNo++;
                        //if ref matches, then check amount -compareValues(6,1)
                        if(compareValues(j,i)){
                            System.out.println("Value match");
                            matchedValueNo++;
                            deleteRow(i);
                            break;
                        }
                    }
                }
            }
        }
        return null;
    }


    @Override
    public void done() {
        Toolkit.getDefaultToolkit().beep();
        btnStart.setEnabled(true);
        progressMonitor.setProgress(0);
        progressMonitor.close();
        System.out.println("Refereces matced="+matchedRefNo+"\n Values matched "+matchedValueNo);
      }


//and int action performed method
   progressMonitor = new ProgressMonitor(MainForm.this,
                                  "Scanning files.....",
                                  "", 0, 100);
            progressMonitor.setProgress(0);
            task = new Task();
            task.addPropertyChangeListener(this);
            task.execute();
    }
  • 0
    В doInBackground () у вас есть цикл while, который выполняется, когда progress <rowCount. Так как прогресс никогда не достигнет rowCount (максимальный прогресс - rowCount / 10), цикл никогда не завершится. Далее у вас есть вызов setProgress (). Что это делает? Вы можете опубликовать этот код. Почему вы используете это вместо progressMonitor.setProgress ()?
  • 0
    Огромное спасибо. Я изменил setProgress () на progressMonitor.setProgress (), и теперь он работает просто отлично. Большое спасибо за Вашу помощь.
Теги:

1 ответ

0

Первое, на что я смотрю, - это break; в выражении if. Вам не нужно включать это, и моя мысль заключается в том, что вы нарушаете петлю.

Что работает неправильно? У вас есть сообщения об ошибках?

  • 0
    индикатор выполнения не работает должным образом. Это никогда не останавливается и продолжает бежать.
  • 0
    Похоже, у вас есть бесконечный цикл. Попробуйте проверить каждый из циклов, чтобы убедиться, что все увеличивается, и т. Д. Iheanyi прокомментировал ваш вопрос, указывая на то, что может быть причиной этой проблемы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню