Не удается создать JProgresBar внутри определенного метода - PullRequest
0 голосов
/ 25 октября 2019

В основном у меня есть один метод, который должен хранить определенное количество символов из текстового файла в массив строк, это сделано для более удобной обработки больших текстовых файлов. Но источником этой проблемы является не функция метода, а тот факт, что когда я пытаюсь создать индикатор выполнения для синтаксического анализа текстового файла, он просто не отображается. Я пытался создать внешний метод для создания индикатора выполнения, но в обоих случаях индикатор выполнения просто не показывает, а остальная часть JFrame показывает. я попытался создать точно такой же JFrame в тестовой программе, он работал нормально, я попытался создать JFrame в основном методе этого класса, и он работал нормально. Кажется, этот метод каким-то образом не создаст индикатор выполнения. Для справки пользовательский интерфейс представляет собой другой фрейм, который хранится глобально, он не важен для этой проблемы, а манипулятор представляет собой отдельный класс со встроенными функциями, который также не важен. Вот основной класс. Любая помощь приветствуется. Для справки, часть, где предполагается создать индикатор выполнения, начинается со строки 52.

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.imageio.IIOException;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.filechooser.FileSystemView;

public class main{
    public static graphics UI;
    public static File path;
    public static List<String> books = new ArrayList<>();
    public static FileManipulator manipulator= new FileManipulator();
    public static String systemPath = "D:\\Eclipse Workspace\\APCS\\src\\APCS";
    public static int scriptCount = 1;

    public static void main(String[] args) {
        UI = new graphics();
        UI.setVisible(true);
    }

    public static void setPath(String filePath) {
        path = new File(filePath);
        UI.setPathText(path.toString());
    }


    public static String fileChooser() {
        JFileChooser jfc = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory());

        int returnValue = jfc.showOpenDialog(null);

        if (returnValue == JFileChooser.APPROVE_OPTION) {
            File selectedFile = jfc.getSelectedFile();
            return selectedFile.getAbsolutePath();
        }else {
            return null;
        }
    }

    public static void calculateAndStoreBooks() {
        long bookLength = path.length();
        int bookNumber = 395;
        bookNumber = (int) Math.ceil(bookLength / 10500);

        JFrame f = new JFrame("Parsing Progress"); 
        JPanel p = new JPanel(); 
        JProgressBar b = new JProgressBar(1, bookNumber); 
        b.setStringPainted(true); 
        p.add(b); 
        f.add(p); 
        f.setSize(500, 100); 
        f.setVisible(true); 

        if(bookLength <= 10500) {
            bookNumber = 1;
            UI.setBooksText("1");

            try {
                books.add(manipulator.getCharacters(path, (int) path.length()));
            } catch (IOException e) {
                e.printStackTrace();
            }

        }else {
            UI.setBooksText(Integer.toString(bookNumber));

            try {
            for(int i = 0; i < bookNumber; i++) {
                if(bookNumber - 1 == i) {
                    books.add(manipulator.getCharacters(path, (int) path.length()));
                    manipulator.removeCharacters(path, (int) path.length(), systemPath);
                    b.setValue(i);
                }else {
                    books.add(manipulator.getCharacters(path, (int) 10500));
                    manipulator.removeCharacters(path, 10500, systemPath);
                    b.setValue(i);
                }
            }
            }catch(IOException e) {
                e.printStackTrace();
            }

            f.dispose();
        }
        System.out.println(books.get(1));
        System.out.println(books.get(2));

    }

    public static void buildBooks() {
        manipulator.manipulate(books.get(scriptCount), systemPath, Integer.toString(scriptCount));
        UI.setBookCounter(Integer.toString(scriptCount));
        scriptCount++;
    }
}
...