2010-06-09 15 views
5

Gibt es eine Möglichkeit zum Rekonstruieren der Befehlszeilenargumente, die innerhalb eines Java-Programms an Java übergeben werden, einschließlich der JVM-Optionen und der Option für den Klassenpfad?Rekonstruktion von Java-Befehlszeilenargumenten

Ich habe ein Java-Programm, das die JVM neu starten und seinen bootclasspath (d. H. Versuchen, einige Systemklassen zu überschreiben) muss. Ich verwende die libcsystem Methode, um die neue JVM aufzurufen.

Ich bin offen für bessere Ansätze, aber Java-Agenten ist keine Option.

+0

Ich bin wirklich neugierig auf das, was Sie hier tun wollen ... – alex

+0

Ist 'ps -xxx' verfügbar? – trashgod

+0

@trashgod, nein es ist nicht für die Wiederverwendung – notnoop

Antwort

1

Warum nicht eine Datei verwenden, die diese Eigenschaften hat wie die Eclipse ini Datei und NetBeans conf Dateien. Auf diese Weise lesen Sie einfach diese Eigenschaften und erstellen den neuen Java-Prozess mit diesen Eigenschaften. ist in der Regel eine schlechte Idee

Zurück zu Ihrer Frage, sollte diese vorherige answer

+0

Danke! 'RuntimeMZBean.getInputArguments()' löst das Problem ziemlich gut. – notnoop

-1

Err ... Modifizieren einer ganzen Core-Java-Klasse um Laufzeit ist eine sehr sehr schlechte Idee.

Was ist falsch mit Unterklassen hier? Versuchen Sie, eine externe Bibliothek zu ändern, Funktionalität hinzuzufügen oder faul zu sein?

+0

Warum der Downvote? – TheLQ

+0

Willkommen im Internet, Freund. –

0

tun Ich bin damit einverstanden, dass mit dem bootclasspath futzing. Aber ...

Besorgen Sie sich den Code für "java.c" - das C-Programm, das zu java.exe kompiliert. Sie werden feststellen, dass es nur die JNI-Aufruf-API verwendet, um eine JVM zu erstellen und die Hauptmethode aufzurufen. Sie könnten dies ändern und neu kompilieren, um nach bestimmten Beendigungscodes usw. zu suchen und die JVM bei Bedarf erneut zu starten und neu zu starten.

Alternativ macht Eclipse dies (oder zumindest verwendet), aber mit einem Java-Programm die Befehlszeile (aus einer Requisiten-Datei usw.) konstruieren und einen Unterprozess starten. Er hakte erneut den Exit-Code des Unterprozesses und entschied damit, ob ein neuer Unterprozess neu gestartet werden sollte oder nicht.

Verwandte Themen