更新位于EventQueue.InvokeLater

时间:2018-12-06 13:29:36

标签: java multithreading swing progress-bar jprogressbar

我在更新JProgressBar时遇到问题:

//Start to search for files on drives
private void searchForDICOMFIles2(ArrayList<String> foundDriveLetters)
{

    //Thread 1 - search for DICOM files and add them to array
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {

                ////here is the problem
                for (String currentDriveLetter_2:foundDriveLetters)
                {
                    File currentDrive_2 = new File(currentDriveLetter_2);
                    checkFilesAndFoldersForDICOMFiles(currentDrive_2);

                }

                //updating here will work
                Screen_ImportingFiles.setCheckMarkForTaskLabel(1);
                Screen_ImportingFiles.updateProgressBar(25, 1, true);

            } catch (Exception e) {
                e.printStackTrace();

方法checkFilesAndFoldersForDICOMFiles是一个巨大的FOR循环,它循环访问驱动器上的文件并根据扩展名搜索DICOM文件,如果没有扩展名,它将尝试读取文件以确定是否为DICOM。根据文件数,它还希望显示文件检查的进度(即50%表示它检查了300个文件中的150个)。当我想通过此方法更新进度条时,不是在JFrame上更新进度条。

有没有办法像这样更新进度条?

0 个答案:

没有答案