我正在编写一个程序,它有两个主要阶段:确定感兴趣的区域,然后识别该区域中的对象。我的界面有一个 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 但无济于事。那么,我该怎么做呢?