Java - SwingWorker - problem in process () method

I use javax.swing.SwingWorkerfor the first time.

I want to update JLabelfrom intermediate results published by Swing Worker as follows:

publish("Published String");

Now, to update JLabel, I encoded the following:

process(List<String> chunks) {
    if (chunks.size() > 0) {
        String text = chunks.get(chunks.size() - 1);
        label.setText(text);
    }
}

The above code works, but my problem (or, more specifically, my doubt) is as follows:

The swing work task above is an anonymous inner class, so it can access the field label.

But what if I want the working swing class to be not an inner class. Do I have to pass the labelswing worker class constructor as an argument so that the process () method can access.

Or is there another way?

swing, swing worker ?

+3
1

, - . swing worker process() .

. SwingWorker:

class PrimeNumbersTask extends 
    SwingWorker<List<Integer>, Integer> {
        PrimeNumbersTask(JTextArea textArea, int numbersToFind) { 
            //initialize 
        }

        @Override
        public List<Integer> doInBackground() {
            while (! enough && ! isCancelled()) {
                number = nextPrimeNumber();
                publish(number);
                setProgress(100 * numbers.size() / numbersToFind);
            }
        }
        return numbers;
    }

    @Override
    protected void process(List<Integer> chunks) {
        for (int number : chunks) {
            textArea.append(number + "\n");
        }
    }
}

JTextArea textArea = new JTextArea();
final JProgressBar progressBar = new JProgressBar(0, 100);
PrimeNumbersTask task = new PrimeNumbersTask(textArea, N);
task.addPropertyChangeListener(
    new PropertyChangeListener() {
        public  void propertyChange(PropertyChangeEvent evt) {
            if ("progress".equals(evt.getPropertyName())) {
                progressBar.setValue((Integer)evt.getNewValue());
            }
        }
    });

task.execute();

PrimeNumbersTask(JTextArea textArea, int numbersToFind). JTextArea .

+4

Source: https://habr.com/ru/post/1743238/


All Articles