在for循环中执行SwingWorker

时间:2012-09-26 09:24:15

标签: java swing swingworker

我想从扫描仪中获取图像并将它们放在一个HashMap中,其名称按SwingWorker Class执行的某个顺序执行,名为ScanningService。我想使用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());
                }
            }
        });
    }

1 个答案:

答案 0 :(得分:1)

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

  • SwingWorker不适合加载图片,也不适合某段时间

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

  • 必须在EventDispatchThrea d完成对Swing GUI的所有更改,您已查看Concurency in Swing