0

プログレスバーのようなスライダーをページに追加しようとしています。しかし、私のコードはうまく機能していません。

私の仕事は、ある場所から別の場所に何かをコピーするときに、ページに進行状況バーを表示したいことです。
そこで、javaFx で以下のタスクを書きましたがうまくいきません。そのコードは実行されますが、30%、50%、「終了」などのパーセンテージで作業を表示したいです。しかし、私のコードでは同様の要件が得られないので、助けてください。

私のコードは次のとおりです。

1.プログレスバーとプログレスインジケーターの宣言

@FXML
final ProgressBar progressBar = new ProgressBar();
@FXML
final ProgressIndicator progressIndicator = new ProgressIndicator();

2.コピーボタンをクリックしたときに値を割り当てます。

@FXML
private void handleOnClickButtonAction(MouseEvent event) {
    if (fromLabel.getText().isEmpty()
            || toLabel.getText().isEmpty()
            || fromLabel.getText().equalsIgnoreCase("No Directory Selected")
            || toLabel.getText().equalsIgnoreCase("No Directory Selected")) {
        // Nothing
    } else {
        progressBar.setProgress(0.1f);
        progressIndicator.setProgress(progressBar.getProgress());
        this.directoryCount.setText("Please Wait !!!");
    }
}

このコードでは、10% の完了しか表示されず、「完了」と直接表示されますが、プロセス全体を 10、20、30 などのパーセンテージで表示してから「完了」したいと考えています。


私のコピーコード:

double i = 1;
while (rst.next()) {
    File srcDirFile = new File(fromLabel.getText() + "/" + rst.getString("nugget_media_files"));
    File dstDirFile = new File(toLabel.getText() + "/" + rst.getString("nugget_media_files"));
    File dstDir = new File(toLabel.getText() + "/" + rst.getString("nugget_directory"));
    if (srcDirFile.lastModified() > dstDirFile.lastModified()
            || srcDirFile.length() != dstDirFile.length()) {
        copyDirectory(srcDirFile, dstDirFile, dstDir);
    }

    this.currentNuggetCount = i / this.nuggetFolderSize;

    System.out.println("Nugget Count : " + this.currentNuggetCount);

    Platform.runLater(new Runnable() {
        @Override
        public void run() {
            progressBar.setProgress(1.0f);
            progressIndicator.setProgress(progressBar.getProgress());
        }
    });

    ++i;
}

これはcopyDirectory方法です:

private static void copyDirectory(File srcDir, File dstDir,File destNugget) {
    System.out.println(srcDir+" >> "+dstDir);
    if(!destNugget.exists()) {
        destNugget.mkdirs();
    }

    if (srcDir.isDirectory()) {
        if (!dstDir.exists()) {
            dstDir.mkdirs();
        }

        String[] children = srcDir.list();
        for (int i=0; i<children.length; i++) {
            copyDirectory(new File(srcDir, children[i]),
                          new File(dstDir, children[i]),
                          destNugget);
        }
    } else {
        InputStream in = null;
        try {
            in = new FileInputStream(srcDir);
            OutputStream out = new FileOutputStream(dstDir);
            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            in.close();
            out.close();
        } catch (IOException ex) {
            System.out.println("Exceptio "+ex);
        } finally {
            try {
                in.close();
            } catch (IOException ex) {
                System.out.println("Exceptio "+ex);
            }
        }
    }
}
4

2 に答える 2