Kann ich mit main() zu starten meiner Anwendung?
Recherchiere ich eine Möglichkeit, neu zu starten, meine java-Anwendung durch klicken auf eine Schaltfläche auf der Benutzeroberfläche. Ich suchte im web und stieß auf main( new String[0]). Ich brauche, um zu verstehen, wenn diese eine gültige Methode zum starten meiner Anwendung. Kann jemand bitte beraten Sie, danke.
private void bnNewsaleActionPerformed(java.awt.event.ActionEvent evt) {
main( new String[0]);
}
Bearbeiten, Wäre das besser?
private void bnNewsaleActionPerformed(java.awt.event.ActionEvent evt) {
classname.this.dispose();
main( new String[0]);
}
Wenn Ihr app-GUI ist noch oben, dann ist die app bereits ausgeführt wird
InformationsquelleAutor Adesh | 2012-10-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ruft die statische
main
Methode mit einem leeren string-array. Sehen, ob das macht es klarer:Zugegeben, es ist ungewöhnlich, rufen Sie einen
main
Methode, die aus nicht-main-Methode... und es ist nicht wirklich "neu starten" die Anwendung. Sie nennen es aus dem bestehenden hf der durchaus unangenehme Folgen. Ich würde nicht empfehlen es.Wenn Sie arbeiten können, einen Weg zu finden, starten Sie eine völlig saubere Prozess, das wäre eine weit zuverlässigere "neu starten".
InformationsquelleAutor Jon Skeet
Du bist nicht in der Lage sein, um starten Sie Ihre Anwendung ohne beenden der JVM - JVM wird zugewiesen haben, Objekte, threads, etc. und ohne viel Zimmerreinigung du wirst es nicht leicht trash.
Ich denke, ein einfacher Weg ist, um wickeln Sie Ihre Anwendung in einem Skript und das Skript neu starten, deine app, wenn es beendet sich mit einem bestimmten exit-code. So können Sie Ihren Müll JVM vollständig über einen
System.exit()
nennen, und wenn das script startet nur Ihre app, wenn es sieht, einen bestimmten exit-code, haben Sie die option beenden, oder beenden und Neustarten.z.B. check-out die JavaServiceWrapper. Dies bietet eine Möglichkeit zum start einer Java-Anwendung mit bestimmten config/Parameter, und zur Steuerung neu starten Verhalten. Beachten Sie, dass es bietet eine einen bestimmten API-Aufruf zu einem Neustart aufrufen von innerhalb Ihrer Anwendung.
InformationsquelleAutor Brian Agnew
Dies ist nicht ein guter Weg, um die Anwendung neu starten, da der erste Aufruf der Anwendung würde immer noch laufen. Wenn Sie "neu starten" Ihre Anwendung wie zum Beispiel, dass oft genug, Sie bekommen würde ein stack-überlauf.
Wenn Sie müssen die Anwendung neu starten, ohne aufzuhören (was ungewöhnlich ist), können Sie eine
try
/catch
- block in Ihremain
, setzen Sie eine Schleife um ihn herum, und setzen Sie die Schleife, wenn Sie eine Ausnahme. Allerdings ist dies mehr ein workaround als alles andere, weil Sie Ausnahmen zur Kontrolle der "normalen" Programmablauf.Das ist einige hässliche Art und Weise neu zu starten.
Zugegeben, das ist eine Lösung, der Letzte Ausweg, die an das hack. Ich bearbeitet meine Antwort deutlich zu machen.
InformationsquelleAutor dasblinkenlight
Als Sie Lesen.
Was er macht, ist auf
bnnewsaleActionPerformed
es ruft main() mit einer leeren neuen string.Dies wird nicht die Anwendung neu starten.
Neu zu starten bedeutet, zu stoppen und erneut zu starten.
In der Erwägung, dass mit dem code, es wird starten Sie Ihre Anwendung erneut, innen Ihre aktuelle Anwendung.
Eine Art, wie das verschachteln und es werden unangenehme Effekte zum Beispiel : nicht zurücksetzen alle statische Zuordnungen.
InformationsquelleAutor Mukul Goel
Hier ist ein konkretes Beispiel dafür, was @Brian Agnew bereits oben vorgeschlagen.
In Sie Java-code, beenden Sie mit einem bestimmten Ausgang für den Fall der Wiederaufnahme des
Nun ein Skript erstellen, das ist eigentlich verwendet, um kick-start Ihrer Anwendung. Ich gebe Beispiel der windows-batch-Skript über hier aber Sie arbeitete ähnliche scripts für andere OS.
Der batch-Datei:
Beim beenden mit dem status-code 5 (es kann jede beliebige ganze Zahl), dann haben Sie batch starten das Programm (
Test
ist die Beispiel-Klasse die main-Methode)InformationsquelleAutor Santosh
main()
ist eine Funktion, die Sie in dieser Klasse definiert sind.Es nimmt ein einzelnes argument des Typs
string[]
.Diese Zeile ruft die Funktion wie jede andere Funktion.
Er übergibt einen leeren string-array (
new String[0]
)Seit Ihr
main()
Funktion beginnt Ihre Anwendung, dies wird "neu starten".Aber es wird nicht zurückgesetzt, alle statischen Zustand.
InformationsquelleAutor SLaks
Es ist nichts besonderes über die main-Methode in java, so ruft main unterscheidet sich nicht vom Aufruf einer anderen Methode. Alle bit-jvm Initialisierung geschieht, bevor die java-runtime sucht für die Methode mit dem Namen "main".
Wenn Sie möchten, starten Sie die Anwendung ohne beenden der jvm, die Sie haben, zu vermeiden oder zu bereinigen, die jedes bit der statischen Zustand. Für einfache Fälle können Sie einfach schreiben Sie eine Klasse zur Verwaltung Ihrer Lebensdauer der Anwendung, und erstellen Sie eine neue Instanz für einen Neustart.
Für nicht triviale Beispiele das kann hässlich werden ThreadLocals/statische Variablen/Dateien markiert, löschen Sie auf beenden, müssen betreut werden. Auch updates der Anwendung Klassen, die erst sichtbar werden, mit einigen classloader Tricks.
InformationsquelleAutor josefx