Проблемы с завершением Java-приложенияJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проблемы с завершением Java-приложения

Сообщение Anonymous »

Я написал код для чтения локального файла JSON и помещения его на порт 9000. По истечении установленного срока класс PutJsonOnline должен завершиться. Будет вызван метод завершения, и доступ к порту 9000 должен быть отключен. Однако после вызова метода завершения я все еще могу получить доступ к порту 9000. Может ли кто-нибудь помочь мне правильно завершить соединение с портом 9000?

import static spark.Spark.*;

import java.io.InputStream;
import java.util.Scanner;
import java.util.concurrent.CountDownLatch;

public class PutJsonOnline {

private static volatile boolean isRunning = false;
private static final CountDownLatch latch = new CountDownLatch(1);
private static Thread serverThread;

public static void main(String[] args) {
startServer();
}

public static void startServer() {
serverThread = new Thread(() -> {
port(9000);

// Define endpoint to serve JSON data
get("/data", (req, res) -> {
if (!isRunning) {
halt(403, "Server is not running");
}
res.type("application/json");

// Read JSON data from file in resources directory
InputStream inputStream = SendJsonToServer.class.getResourceAsStream("/data.json");
String json = readFromInputStream(inputStream);

return json;
});

// Log server start
System.out.println("Server started on port 9000");
isRunning = true;
latch.countDown(); // Signal that the server has started
});

System.out.println("Starting server thread...");
serverThread.start();
try {
latch.await(); // Wait for the server to start
System.out.println("Server thread started and latch released.");
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}

private static String readFromInputStream(InputStream inputStream) {
if (inputStream != null) {
try (Scanner scanner = new Scanner(inputStream).useDelimiter("\\A")) {
return scanner.hasNext() ? scanner.next() : "{}"; // Return empty JSON object if file is empty
}
}
return "{}"; // Return empty JSON object if file is not found
}

public static void terminate() {
System.out.println("Terminating server...");
isRunning = false;

// Stop the Spark server
stop();

// Wait for Spark to stop
awaitStop();

// Ensure the server thread is stopped
if (serverThread != null && serverThread.isAlive()) {
serverThread.interrupt();
try {
serverThread.join();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}

System.out.println("Server stopped.");
}
}


Подробнее здесь: https://stackoverflow.com/questions/785 ... pplication
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»