Ich habe ein GUI-Programm, das TestNG Automation Skripte ausführt. Es ist für Benutzer gedacht, einige Einstellungen einfach zu konfigurieren und das gewünschte Automatisierungsskript zu starten.Stoppen eines laufenden Prozesses über GUI, in Java
Eine Sache, die ich hinzufügen muss, ist die Fähigkeit, den laufenden TestNG-Prozess sofort zu stoppen. So etwas wie in Eclipse, der Button "Beenden" stoppt sofort, was gerade läuft.
Dies ist, was der Code, der die TestNG Tests aussieht startet:
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();
}
}
Gemäß dem Kommentar, der tng.run()
mehrere Minuten dauern kann zu vollenden, und es mehrere Dinge, Öffnen/Schließen Browserfenster durchführen, etc.
Wie kann ich den Prozess einfach sofort beenden, wie wenn Sie eine Anwendung von einer IDE aus ausführen würden?
EDIT:
Per Kommentare, bin ich versucht, eine ServiceExecutor und shutDownNow()
Der Code zu verwenden, wird wie folgt aussehen: wird
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); beendet die JVM sofort – Olu
@OluCode Ja, aber wird das nicht auch meine GUI-Anwendung zu töten? Ich brauche eine Möglichkeit, um das laufende TestNG-Objekt einfach zu töten. – Andrio
Wenn es ein Thread ist, verwenden Sie einen Thread-Manager wie ExecutorService, um die Thread-Lebensdauer für Sie zu behandeln, und rufen Sie serviceObject.shutDownNow() auf; – Olu