Сканер NextLine Метод Никогда не готов, пока запущен процесс YoutubeDL? - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь загрузить видео с YouTube с помощью YoutubeDL (это не обязательно актуально, процесс запускается и загружает видео).

Настоящая проблема возникает, когда я настраиваю сканер, чтобы попытаться прочитать вывод из потока и попытаться отобразить ETA (который отображается в процессе youtube-dl).

@Override
public boolean recieveTransmission() throws IOException {
    Process process = new ProcessBuilder("youtube-dl", "-f", "best", "--newline", "-o", getPath().toString(), this.url).inheritIO().start();
    try ( Scanner scanner = new Scanner(process.getInputStream())) {
        while (scanner.hasNextLine()) {
            var str = scanner.nextLine();
            System.out.println(str);
            //Check that we're on the right line that contains the ETA and percent
            if (str.contains("[download]") && str.contains("%") && str.contains("ETA")) {
                //Set Progress & ETA
                Pattern pattern = Pattern.compile("\\d+(\\.\\d{1,2})?%");
                Matcher matcher = pattern.matcher(str);
                this.progress = Double.parseDouble(matcher.group().replace("%", ""));
                pattern = Pattern.compile("/d/d:/d/d");
                matcher = pattern.matcher(str);
                this.ETA = matcher.group();
                System.out.println("F");
            }
        }
    }
    try {
        process.waitFor();
        System.out.println("Progress: " + this.progress + " ETA: " + this.ETA);
    } catch (InterruptedException ex) {
        Logger.getLogger(YoutubeUplink.class.getName()).log(Level.SEVERE, null, ex);
    }
    System.out.println(StellarDiskManager.getOutputFolder().toAbsolutePath().toString());
    return true;
}

Вместо этого происходит то, что цикл while никогда не входил (из моих тестов в отладчике), указывая на то, что метод scanner.hasNextLine никогда не выполняется. Я не уверен, что с этим происходит.

Я сделал короткое видео, показывающее, что происходит. (https://youtu.be/qPKu-ykTo2A)

Просто для ясности, процесс youtube-dl выводит строки, подобные этой, при загрузке с использованием --newline: [download] 1.2% of 41.17MiB at 1.69MiB/s ETA 00:24

...