Mam program GUI, który wykonuje skrypty automatyzacji TestNG. Jest przeznaczony dla użytkowników do łatwego konfigurowania niektórych ustawień i uruchamiania skryptów automatyzacji, których potrzebują.Zatrzymywanie uruchomionego procesu za pośrednictwem interfejsu GUI, w java
Jedna rzecz, którą muszę dodać, to możliwość natychmiastowego zatrzymania działającego procesu TestNG. Coś jak w Eclipse, przycisk "Zakończ" natychmiast zatrzyma wszystko, co działa.
To co kod, który uruchamia testy TestNG wygląda następująco:
public class ScriptRunner implements Runnable {
public void runScript() {
Thread testRun = new Thread(this);
testRun.start();
}
@Override
public void run() {
//various other things are configured for this,
//but they're not relevant so I left them out
TestNG tng = new TestNG();
//While this runs, various browser windows are open,
//and it could take several minutes for it all to finish
tng.run();
}
}
Zgodnie z uwag, tng.run()
może potrwać kilka minut, aby zakończyć, i to wykonując kilka rzeczy, okna otwarcie przeglądarki/zamykania, itp.
Jak mogę natychmiast zakończyć proces, tak jak w przypadku uruchamiania aplikacji z IDE?
EDIT:
Per komentarzach, ja próbuje użyć ServiceExecutor i shutDownNow()
Kod patrzy tak:
ExecutorService executorService = Executors.newFixedThreadPool(10);
public void runScript() {
executorService.execute(this);
}
//this method gets called when I click the "stop" button
public void stopRun() {
executorService.shutdownNow();
}
@Override
public void run() {
//same stuff as from earlier code
}
System.exit (0); natychmiast zakończy JVM – Olu
@OluCode Tak, ale czy to też nie zabije mojej aplikacji GUI? Potrzebuję sposobu na zabicie działającego obiektu TestNG. – Andrio
jeśli jest to wątek, użyj menedżera wątków, takiego jak ExecutorService, aby obsłużyć żywotność wątku i wywołaj serviceObject.shutDownNow(); – Olu