0

我想从扫描仪获取图像并将它们放置在一个 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());
                }
            }
        });
    }
4

1 回答 1

1
  • SwingWorker被指定只运行一次,然后在你必须调用一个新实例之后

  • SwingWorker不适合加载图像,也不适用于某些时期

  • 看看Runnable#Thread,到 Swing GUI 的输出必须是包装器invokeLater()

  • Swing GUI 的所有更改都必须在EventDispatchThread 上完成,您可以查看Swing 中的 Concurency

于 2012-09-26T09:46:31.953 回答