Я пишу программу, состоящую из двух основных фаз: определение области интереса и затем распознавание объектов в этой области. В моем интерфейсе есть один JProgressBar, и я хочу, чтобы он указывал, на каком этапе он сейчас работает. Я заметил, что при простом «линейном» подходе отображается только второе сообщение. Итак, после https://stackoverflow.com/a/277048 я использую Runnables и SwingUtilities.invokeLater, чтобы установить строку моего индикатор.
private class MarkListener implements ActionListener {
public void actionPerformed(ActionEvent ae) {
mainFrame.getGlassPane().setCursor(new Cursor(Cursor.WAIT_CURSOR));
recognitionProgress.setStringPainted(true);
BlueMarkerTask bmt = new BlueMarkerTask();
bmt.addPropertyChangeListener(PrismRunnable.this);
SwingUtilities.invokeLater(new Runnable(){
public void run(){
recognitionProgress.setString("Marking ROI...");
}
});
bmt.execute();
RecognitionTask rt = new RecognitionTask();
rt.addPropertyChangeListener(PrismRunnable.this);
SwingUtilities.invokeLater(new Runnable(){
public void run(){
recognitionProgress.setString("Segmenting...");
}
});
rt.execute();
}
}
Однако это не работает — в тексте индикатора выполнения остается только «Сегментация».
Я уже пробовал использовать EventQueue вместо SwingUtilities, но безрезультатно. Итак, как мне это сделать?