我想从扫描仪获取图像并将它们放入 HashMap 中,其名称按特定的顺序由名为 ScanningService 的 SwingWorker 类执行。我想使用 for 循环在使用同一设备完成第一个图像后获取另一个图像。 scan.getImage()
完成后返回扫描图像。 sc
参数是一个扫描仪对象。也许有人可以为我提供 Executor 或 Timer 的实现,因为我的试验没有取得任何成果。
for(int k=0; k<10; k++){
lblMessage.setText("Scan Next Image: ");
scan = new ScanningService(sc);
scan.execute();
scan.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent arg0) {
// TODO Auto-generated method stub
if(StateValue.DONE == scan.getState()){
lblImagePreview.setIcon(new ImageIcon(scan.getImage()));
//logic for name in order of sequence
imageList.put<imagename, scan.getImage());
}
}
});
}
最佳答案
SwingWorker被指定只运行一次,然后您必须调用一个新实例
SwingWorker不适合加载图像,也不适合某些时期
看看
Runnable#Thread
,输出到Swing GUI的必须是invokeLater()
中的包装器对 Swing GUI 的所有更改都必须在
EventDispatchThrea
d 上完成,您可以查看 Concurency in Swing
关于java - 在 for 循环中执行 SwingWorker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598512/