Die Einstellung muss in die Systemeigenschaften gelangen ... und sie muss da sein, bevor der relevante Teil der Java-Klassenbibliothek initialisiert wird.
Die "bombensichere" Möglichkeit besteht darin, die Einstellung als Befehlszeilenparameter an die JVM zu übergeben. z.B.
java -Djava.net.preferIPv6Addresses=true ... com.example.MainClass <args>
könnten Sie auch Ihre Anwendung Code, um die Einstellung zu injizieren mit
System.setProperty("java.net.preferIPv6Addresses", "true");
aber Sie müssen sicherstellen, dass die Injektion schnell genug geschieht, und das wäre nicht trivial sein.
1 - "Bald genug" bedeutet, dass die statische Initialisierung des JVM-Netzwerkcodes erfolgt ist. Dies kann in einer komplexen Anwendung schwierig zu erreichen sein. Beachten Sie die Network Properties Dokumentation besagt: "Einige werden nur einmal beim Start der VM überprüft, und daher am besten mit der Option -D des Java-Befehls eingestellt werden ...". Beachten Sie, dass NICHT angegeben wird, dass diese Eigenschaften nur auf diese Weise festgelegt werden können.
Der Vorschlag für die Verwendung des JAVA_OPTS
Umgebungsvariable wird nur für einige Anwendungen arbeiten. Es hängt davon ab, was das Launcher-/Wrapper-Skript der Anwendung tut. Die Standard-java.exe
und javaw.exe
Befehle recht nicht keine Aufmerksamkeit auf $JAVA_OPTS
zahlen
Gleiches gilt für _JAVA_OPTIONS
gilt ... die eine ist, die ich vorher nicht gesehen habe.
Ich habe versucht, diese über die Eingabeaufforderung zu setzen, aber seine wirft einen fehler- -Djava.net.preferIPv6Stack‘nicht als interne oder externe Befehl, ein Programm oder Batch-Datei erkannt. – user27
Lesen Sie den manuellen Eintrag für den Befehl 'java' * sorgfältig *. Die Option "-D" funktioniert, wenn Sie sie richtig verwenden. –
manuelle Eingabe funktioniert in meinem Fall nicht oder vielleicht bin ich nicht in der Lage, es richtig zu tun, hoffe, dass die Injektion funktioniert. thnkx – user27