Ich habe eine ausführbare JAR-Datei. Einmal gestartet, kann man nur stoppen, indem man zum Task-Manager geht und den Java-Prozess beendet. Gibt es einen saubereren Weg, um es zu stoppen, sagen Sie mit einer Benutzeroberfläche, die ein unerfahrener Benutzer verwenden kann?Stoppen einer ausführbaren JAR-Datei
Antwort
Da Sie den Code steuern, möchten Sie etwas in der GUI haben, das das Beenden mit System.exit
ermöglicht. Also, wenn Sie Schwingen verwenden, könnten Sie so etwas wie:
JButton b = new JButton("Exit");
b.setActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
Nun, das Problem ist, dass es keine GUI-Anwendung gibt, wo ich eine Schaltfläche setzen kann. Ich könnte eine andere GUI-Anwendung machen, um mein jar zu stoppen, aber diese GUI würde auf einem anderen jvm arbeiten, so dass sie möglicherweise nicht mit der anderen Anwendung interagieren kann. –
Eine weitere nützliche Technik für window zu hören ist, was passiert, wenn der Benutzer die X-Taste auf Windows klickt (und das Äquivalent auf anderen Systemen):
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
Normalerweise setze ich das im Konstruktor der Klasse, die Frame für die Anwendung erweitert.
Wenn Sie eine JFrame verwenden, müssen Sie auch diese Zeile hinzufügen:
setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
Oder Sie könnten 'setDefaultCloseOperation (WindowConstants.EXIT_ON_CLOSE) 'tun und den zusätzlichen' WindowListener' vermeiden. –
Nun das Problem damit ist, dass es keine GUI-Anwendung gibt, wo ich eine Schaltfläche setzen kann. Ich könnte eine andere GUI-Anwendung machen, um mein jar zu stoppen, aber diese GUI würde auf einem anderen jvm arbeiten, so dass sie möglicherweise nicht mit der anderen Anwendung interagieren kann. –
Wahr, aber manchmal müssen Sie etwas aufräumen, damit Sie keine Kontrolle über diesen Weg haben. – Jonathan
Wenn Ihre Anwendung keine GUI haben - zum Beispiel, wenn es ein Service - dann können Sie zu den lokalen Netzwerkzugang nutzen Simulieren Sie die Standard-IPC-Mechanismen (InterProcess Communication), die das Betriebssystem normalerweise zum Starten und Stoppen von Diensten verwendet.
Eine sehr beliebte Implementierung, dass Sie in Apache Commons Daemon Projekt finden Sie unter: http://commons.apache.org/daemon/
Ich habe launch4J verwendet, um meine jar in eine exe einzupacken, aber ich möchte, dass es als Dienst funktioniert, ich habe versucht, Java Service Wrapper, aber es funktioniert nicht für mich aus irgendeinem Grund. Ich werde in deinen Link schauen. Aber ab sofort ist meine Bewerbung kein Service. –
Ob es ein Dienst ist oder nicht, wenn es keine Benutzerschnittstelle gibt, dann ist der beste Weg, dies zu kontrollieren, der lokale Netzwerkzugriff. Öffnen Sie einen abhörenden Socket, der nur Verbindungen vom lokalen Rechner akzeptiert, und warten Sie, bis die Befehle in einem separaten Thread ankommen. – Jonathan
Commons Daemon hat das bereits für Sie implementiert - sie stellen sowohl den "Server" als auch den "Client" für diese Methode bereit. – Guss
Ihre Anwendung wird beendet, wenn alle Nicht-Daemon-Threads beendet. Eine Möglichkeit, dies zu tun, wäre, alle Threads außer einem Daemon zu machen, und der letzte Thread wäre derjenige, der das Signal zum Stoppen erwartet.
Ich habe endlich die Lösung für mein Problem gefunden. Da ich keine GUI habe, die ich schließen kann, habe ich auch keine Konsole. Der beste Weg ist die Verwendung der SystemTray API im Paket java.awt. Klicken Sie einfach mit der rechten Maustaste auf das Symbol und beenden Sie es.
- 1. Verschlüsselung einer ausführbaren Datei
- 2. Erstellen einer ausführbaren JAR-Datei
- 3. lesen thumbprint einer ausführbaren \ process
- 4. Stoppen einer Programmschleife
- 5. Erstellen einer ausführbaren .jar mit Intellij
- 6. Kompilieren einer statischen ausführbaren Datei mit CMake
- 7. Debuggen einer ausführbaren Datei in Visual Studio
- 8. Ändern der Ressourceninhalte einer laufenden ausführbaren Datei
- 9. Dämonisieren einer ausführbaren Datei in ansible
- 10. Kivy: Kompilieren zu einer einzigen ausführbaren Datei
- 11. Erstellen einer ausführbaren Datei mit wix
- 12. Erstellen einer neuen ausführbaren ELF-Datei
- 13. Kompilieren einer eigenständigen statischen ausführbaren Datei
- 14. Schreiben einer ausführbaren Funktion in C#
- 15. Profiling einer ausführbaren Datei mit cabal
- 16. Vollständige Disassemblierung einer ausführbaren Binärdatei erhalten
- 17. Objektdateien in einer ausführbaren Datei unter Linux
- 18. Parsing die Ausgabe einer ausführbaren Datei
- 19. Entpacken einer ausführbaren Datei aus einer Bibliothek in C/C++
- 20. Verpacken einer Python-Bibliothek mit einer ausführbaren Datei
- 21. Pfad zu einer Ressource in einer JAR ausführbaren Datei
- 22. Speicherlayout der ausführbaren Datei
- 23. Stoppen einer laufenden Spark-Anwendung
- 24. Abbrechen/Stoppen einer Timeout-Funktion
- 25. Problem beim Stoppen einer Schleife
- 26. Push eines ausführbaren Funktionszeigers?
- 27. Wie kann ich gcc unter Cygwin stoppen, indem ich ".exe" zu kompilierten ausführbaren Dateien hinzufüge?
- 28. Name der ausführbaren Anwendung unterscheidet sich von vshost ausführbaren Namen
- 29. gprof und Argumente ausführbaren
- 30. Windows Lua zu ausführbaren
Haben Sie Zugriff auf den Code oder ist dies eine Anwendung von Drittanbietern? –
Ich habe die ganze Anwendung gemacht, also ja, ich habe Zugriff auf den Code. –