Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在for循环中执行SwingWorker_Java_Swing_Swingworker - Fatal编程技术网

Java 在for循环中执行SwingWorker

Java 在for循环中执行SwingWorker,java,swing,swingworker,Java,Swing,Swingworker,我想从扫描仪中获取图像,并将它们放在HashMap中,其中的名称按照SwingWorker类ScanningService执行的特定顺序排列。我想使用for循环在第一个图像使用同一设备完成后获取另一个图像scan.getImage()完成后返回扫描的图像。sc参数是扫描仪对象。也许有人可以给我一个执行器或定时器的实现,因为我的试验还没有结果 for(int k=0; k<10; k++){ lblMessage.setText("Scan Next Image: "

我想从扫描仪中获取图像,并将它们放在HashMap中,其中的名称按照SwingWorker类ScanningService执行的特定顺序排列。我想使用for循环在第一个图像使用同一设备完成后获取另一个图像
scan.getImage()
完成后返回扫描的图像。
sc
参数是扫描仪对象。也许有人可以给我一个执行器或定时器的实现,因为我的试验还没有结果

    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());
                }
            }
        });
    }
for(int k=0;k
  • 指定只运行一次,然后在您必须调用新实例之后

  • 不适用于加载图像,也不适用于某些时段

  • 要使look
    Runnable#线程
    ,到Swing GUI的输出必须是
    invokeLater()中的包装器

  • 对Swing GUI的所有更改必须在
    EventDispatchThrea
    d上完成,您已经看到了


我可能会将循环放在
SwingWorker
中,因为您可能一次只能扫描一个文档……出了什么问题?到目前为止,代码段看起来还不错……但会将执行放在末尾,只是为了确保在添加侦听器之前工作人员还没有准备好:-)1) OP正按照你的建议做b)你是什么意思?c) 为什么??一个swingworker抽象掉了所有肮脏的细节d)正确,但这正是OP已经在做的事情(通过倾听swingworker状态的变化)@kleopatra我永无止境的故事继续。。。1. <代码>可运行#线程
仍然是更好的选择,2<代码>可运行#线程对于包装到
调用器中的大多数方法来说都不是必需的
更安全的是使用它,3。没有几个代码示例需要
SwingWorkers
方法
publish
process
done
invokeLater
,由真正的Swing专家进行逻辑描述(:我不包括我的个人,我是唯一一个有很多帖子的投稿人,投票分数很低:-),4。永远不要将其用于生产代码,5。对于享受或学习是非常有用的。为什么要把事情搞得一团糟呢?完全不同意。。。永远不会结束的故事;-)希望在EDT上运行的工人方法中看到所需的调用器。@kleopatra完全不同意地摇头。。。这是一个永无止境的故事;-),那为什么,没有理由继续…,对不起