Comment configurer java.net.preferIPv4Stack=true à l'exécution?

je dois désactiver IPv6. Pour cela, la documentation java indique que la propriété jvm estjava.net.preferIPv4Stack=true.

Mais je ne comprends pas comment le faire à partir du code lui-même.

de nombreux forums ont démontré le faire depuis l'invite de commande, mais je dois le faire à l'exécution.

31
demandé sur Martin Serrano 2012-03-27 05:51:43

6 réponses

Vous pouvez utiliser System.setProperty("java.net.preferIPv4Stack" , "true");

cela équivaut à le passer dans la ligne de commande via -Djava.net.preferIPv4Stack=true

47
répondu Kal 2012-03-27 02:02:02

une autre approche, si vous êtes désespéré et n'avez pas accès (a) au code ou (b) à la ligne de commande, alors vous pouvez utiliser les variables d'environnement:

http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-Desktop/html/plugin.html.

Spécifiquement pour java web start définir la variable d'environnement:

JAVAWS_VM_ARGS

et pour les applets:

_JPI_VM_OPTIONS

e.g.

_JPI_VM_OPTIONS=-Djava.net.preferIPv4Stack=true

de plus, sous Windows, les options globales (pour les applications Java générales) peuvent être définies dans la page Java control plan sous l'onglet "Java".

9
répondu Jamie Love 2012-07-18 23:53:47

j'ai rencontré ce même problème en essayant d'envoyer du courrier avec javax.courrier provenant d'une application web dans un serveur Web exécutant Java 7. Les destinations du serveur de messagerie interne ont échoué avec "network unreachable", malgré le fait que telnet et ping fonctionnent depuis le même hôte, et alors que les serveurs de messagerie externes fonctionnent. J'ai essayé

System.setProperty("java.net.preferIPv4Stack" , "true");

dans le code, mais ça a échoué. Donc la valeur du paramètre a probablement été mise en cache plus tôt par le système. Paramétrage de l'argument VM

-Djava.net.preferIPv4Stack=true

dans le serveur web le script de démarrage a fonctionné.

une autre preuve: dans un très petit programme de test ciblé, définir la propriété du système dans le code travail. Le paramètre est donc probablement mis en cache lorsque la première Socket est utilisée, probablement pas juste au début de la JVM.

8
répondu dtc 2014-03-31 15:10:35

Eh bien,

j'ai utilisé System.setProperty("java.net.preferIPv4Stack" , "true"); et il fonctionne à partir de JAVA, mais il ne fonctionne pas sur JBOSS AS7.

Voici mon travail autour de solution,

ajouter la ligne ci-dessous à la fin du fichier ${JBOSS_HOME}/bin/standalone.conf.chauve-souris (juste après :JAVA_OPTS_SET )

set "JAVA_OPTS=%JAVA_OPTS% -Djava.net.preferIPv4Stack=true"

Note: redémarrez le serveur JBoss

3
répondu Hussein mahyoub 2014-12-28 07:40:01

Système.setProperty ne fonctionne pas pour les applets. Parce que JVM est déjà en cours d'exécution avant le début d'applet. Dans ce cas, nous utilisons les paramètres applet comme ceci:

    deployJava.runApplet({
        id: 'MyApplet',
        code: 'com.mkysoft.myapplet.SomeClass',
        archive: 'com.mkysoft.myapplet.jar'
    }, {
        java_version: "1.6*", // Target version
        cache_option: "no",
        cache_archive: "",
        codebase_lookup: true,
        java_arguments: "-Djava.net.preferIPv4Stack=true"
    },
       "1.6" // Minimum version
    );

vous pouvez trouver deployJava.js https://www.java.com/js/deployJava.js

0
répondu mkysoft 2015-09-30 13:07:49

vous pouvez définir la variable D'environnement JAVA_TOOL_OPTS comme suit, qui sera sélectionnée par JVM pour n'importe quelle application.

set JAVA_TOOL_OPTS= - Djava.net.preferIPv4Stack=true

vous pouvez le définir à partir de l'invite de commande ou dans les variables d'environnement système, en fonction de vos besoins. Notez que cela se répercutera sur toutes les applications java qui tournent sur votre machine, même si c'est un interpréteur java que vous avez dans une configuration privée.

0
répondu Soundararajan 2016-07-12 18:15:00