Я пробовал следующий код:
``` private static void killSecondJavaProcess() {
try {
// Get the list of all Java processes using Java's Process API
ProcessBuilder processBuilder = new ProcessBuilder("jps", "-l");
Process process = processBuilder.start();
InputStream inputStream = process.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(inputStreamReader);
String line;
while ((line = reader.readLine()) != null) {
if (line.contains("main.jar")) {
String[] parts = line.split(" ");
String pid = parts[0]; // Get the process ID
System.out.println("Found subprocess with PID: " + pid);
// Terminate the subprocess
ProcessBuilder killProcessBuilder = new ProcessBuilder("taskkill", "/F", "/PID", pid);
Process killProcess = killProcessBuilder.start();
int exitCode = killProcess.waitFor(); // Wait for the process to terminate
if (exitCode == 0) {
System.out.println("Subprocess terminated successfully.");
} else {
System.out.println("Failed to terminate subprocess.");
}
}
}
reader.close();
} catch (IOException | InterruptedException ex) {
ex.printStackTrace();
}
}`
Это не убивает подпроцессы main.jar. При каждом нажатии кнопки, которую я сделал для повторного открытия банки, создается новый подпроцесс. Каждый подпроцесс также содержит тот же объем оперативной памяти, что и исходный jar. Примером диспетчера задач может быть:

У меня есть метод reOpenWindow, если он поможет:
``` public static void reopenWindow() {
if (instance2 != null && instance2.shouldOpenJar()) {
try {
// Launch main.jar using ProcessBuilder
ProcessBuilder pb = new ProcessBuilder("java", "-jar", "main.jar");
pb.directory(new File("./")); // Set the correct directory path
pb.start();
System.out.println("main.jar opened successfully.");
// Reset the flag after opening the jar file
WindowManager.setRefreshButtonClicked(false);
System.out.println("Refresh button state reset to: " + WindowManager.isRefreshButtonClicked());
// Now, terminate all Java subprocesses except the main process
killSecondJavaProcess();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}`
Подробнее здесь: https://stackoverflow.com/questions/784 ... s-of-a-jar