Main зависает / не вернется (командная строка из Java приложения) - PullRequest
0 голосов
/ 02 мая 2020

Итак, этот код запускает сервер на порту 8070. Я уверен, что проблема связана с процессом запуска сервера. После запуска сервера новая команда (команда 2) обрабатывается сервером. Теперь у меня также есть код для выключения сервера, работающего на порте 8070. Я также стараюсь уничтожить процесс, но мой основной поток все еще зависает. Еще одна вещь, о которой я думал, может происходить здесь, связана с созданием других потоков, не являющихся демонами, но я очень незнаком с этим. Предупреждение: я новичок ie с командами cmd от Java, поэтому мне не хватает кода:

try {
        ProcessBuilder builder = new ProcessBuilder();
        if (isWindows) {
            //This command starts the server
            builder.command("cmd.exe", "/c", ".\\gradlew run");
        } else {
            builder.command("sh", "-c", "ls");
        }
        //Server start process
        builder.directory(new File("lib/grobid"));
        Process process = builder.start();
        long tokill = process.pid();
        StreamGobbler streamGobbler =
                new StreamGobbler(process.getInputStream(), System.out::println);
        Executors.newSingleThreadExecutor().submit(streamGobbler);

        //Client API process
        ProcessBuilder builder2 = new ProcessBuilder();
        String command2 = "java -jar target/org.grobid.client-0.5.4-SNAPSHOT.one-jar.jar -in ../PDF_FILES -out ../XML_DOCS -exe processFulltextDocument";
        if (isWindows) {
            builder2.command("cmd.exe", "/c", command2);
        } else {
            builder2.command("sh", "-c", "ls");
        }
        builder2.directory(new File("lib/grobid-client-java-master"));
        Process process2 = builder2.start();
        StreamGobbler streamGobbler2 =
                new StreamGobbler(process2.getInputStream(), System.out::println);
        Executors.newSingleThreadExecutor().submit(streamGobbler);
        int exitCode = process2.waitFor();

        process.destroy();
        process2.destroy();
    }

Main:

    public static void main(String[] args) throws ValidityException, ParsingException, IOException {
      PdfParser pdfParser = new PdfParser();
      pdfParser.parsePdf();

       File config = new File("src/main/resources/config.txt");

        BufferedReader reader = new BufferedReader(new FileReader(config));
        String line = reader.readLine();
        int paper_id = Integer.parseInt(line);
        FileWriter writer = new FileWriter(config);
        XmlParser xml_parser = new XmlParser();
        File folder = new File("lib/XML_DOCS");
        File[] files = folder.listFiles();

    assert files != null;

    for(File file: files) {
        if(file.isFile()) {
            paper_id++;
            xml_parser.parseXml(file.getAbsolutePath(),paper_id);
        }
    }
    writer.write(""+paper_id);
    writer.close();
    reader.close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...