Java 8 – не убивать подпроцессы jarJAVA

Программисты JAVA общаются здесь
Anonymous
Java 8 – не убивать подпроцессы jar

Сообщение Anonymous »

Итак, я пытался выяснить, как открыть jar, затем нажать кнопку, чтобы удалить текущее окно jar, а затем снова открыть тот же .jar. Вместо этого продолжают накапливаться новые экземпляры main.jar.
Я пробовал следующий код:
``` 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

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