java - 在 for 循环中执行 SwingWorker

标签 java swing swingworker

我想从扫描仪获取图像并将它们放入 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 的所有更改都必须在 EventDispatchThread 上完成,您可以查看 Concurency in Swing

关于java - 在 for 循环中执行 SwingWorker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598512/

相关文章:

java - 我们如何知道哪个类给出了异常

java - 比较最终变量时如何摆脱警告?

java - West/East 上的 JLabel 不会出现在 BorderLayout 中

java - 关于运行 GUI 时线程的问题

java - Jenkins 错误启动静态资源

java - @PreUpdate 上的 Stackoverflow

java - 从 JComboBox 列表中删除多余的空白和指定的行

java - JComboBox中如何准确显示字符串?

Java - SwingWorker - 问题

java - 更新 Swing 组件,同时阻止 GUI