1

配列から要素を読み込み、読み込みの進行状況を並列処理読み込みとして表示したい。

私は2つの内部クラスを持っています:

public class NumbersCounter {

    int totalCountOfLines;
    int currentCountOfLines = 1;

    public NumbersCounter() throws FileNotFoundException, IOException {    
        new Read();
        new Progress();
    }

    public static void main(String[] args) {
        try {
            new NumbersCounter();
        } catch (FileNotFoundException ex) {
            Logger.getLogger(NumbersCounter.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(NumbersCounter.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    class Progress extends Thread {  
        public Progress() {
            start();
        }

        @Override
        public void run() {        
            synchronized(new Object()) {
                while (currentCountOfLines <= totalCountOfLines) {
                    System.out.println(currentCountOfLines / totalCountOfLines * 100 + "%");
                    Thread.yield();
                }            
            }
    }}

    class Read extends Thread {
        private FileHandler fh = new FileHandler("ololo.txt");
        private String[] lines;

        public Read() throws FileNotFoundException, IOException {
            this.lines = fh.readFromFile();
            start();
        }

        @Override
        public void run() {

            totalCountOfLines = this.lines.length;

            if (totalCountOfLines > 0) {
                synchronized(new Object()) {
                    for (String line : lines) {
                        currentCountOfLines++;   
                        Thread.yield();
                    }

                }
            } else {
                totalCountOfLines = 0;
            }    
        }
    }
}

Read Thread の最初のステップが実行されると、Progress スレッド、Read、Progress の順に実行する必要があります。

4

2 に答える 2

1

javax.swing.ProgressMonitorInputStream進行状況のダイアログを表示する、入力ストリームのラッパーのクラスを使用します。

于 2012-10-21T05:59:08.283 に答える
0

java.util.concurrent パッケージのドキュメントを参照してください。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/package-summary.html

具体的には、ExecutorService、Executor、Callable、および Future インターフェイスです。並行パッケージは、自分でロックや並行性を処理する必要なく、やろうとしていることを実行できるように構築されています。

バックグラウンドでの IO 操作 - UI を段階的に更新します。

于 2012-10-20T22:59:26.157 に答える