Итак, этот код запускает сервер на порту 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();
}