0

スキャナーから画像を取得し、ScanningService と呼ばれる SwingWorker クラスによって実行される特定の順序で名前を付けて HashMap に配置したいと考えています。同じデバイスを使用して最初の画像が完了した後、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での同時実行を参照してください。

于 2012-09-26T09:46:31.953 に答える