Подтвердить что ты не робот

Как установить java.net.preferIPv4Stack = true во время выполнения?

Мне нужно отключить IPv6. Для этого в документации по java указано значение свойства jvm java.net.preferIPv4Stack=true.

Но я не понимаю, как это сделать из самого кода.

Многие форумы продемонстрировали это из командной строки, но мне нужно сделать это во время выполнения.

4b9b3361

Ответ 1

Вы можете использовать System.setProperty("java.net.preferIPv4Stack" , "true");

Это эквивалентно передаче его в командной строке через -Djava.net.preferIPv4Stack=true

Ответ 2

Другой подход, если вы в отчаянии и не имеете доступа к (a) коду или (b) командной строке, тогда вы можете использовать переменные среды:

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

В частности, для java web start задайте переменную среды:

JAVAWS_VM_ARGS

и для апплетов:

_JPI_VM_OPTIONS

например.

_JPI_VM_OPTIONS = -Djava.net.preferIPv4Stack = истина

Кроме того, в разделе "Глобальные параметры Windows" (для общих приложений Java) можно установить на странице плана управления Java на вкладке "Java".

Ответ 3

Я столкнулся с этой проблемой, пытаясь отправить почту с помощью javax.mail из веб-приложения на веб-сервере под управлением Java 7. Внутренние адреса почтового сервера не удались с "недоступной сетью", несмотря на то, что telnet и ping работают с одного и того же хоста, и в то время как внешние почтовые серверы работали. Я попробовал

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

в коде, но это не удалось. Таким образом, значение параметра, вероятно, было ранее кэшировано системой. Установка аргумента VM

-Djava.net.preferIPv4Stack=true

в запуске веб-сервера script.

Еще одно доказательство: в очень небольшой целевой тестовой программе установка системного свойства в коде действительно работала. Таким образом, параметр, вероятно, кэшируется при использовании первого Socket, возможно, не только при запуске JVM.

Ответ 4

а,

Я использовал System.setProperty("java.net.preferIPv4Stack" , "true");, и он работает от JAVA, но он не работает на JBOSS AS7.

Вот моя работа вокруг решения,

Добавьте нижнюю строку в конец файла ${JBOSS_HOME}/bin/standalone.conf.bat(сразу после :JAVA_OPTS_SET)

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

Примечание: перезапустите сервер JBoss

Ответ 5

System.setProperty не работает для апплетов. Потому что JVM уже работает до запуска апплета. В этом случае мы используем такие параметры апплета:

    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
    );

Вы можете найти deployJava.js в https://www.java.com/js/deployJava.js

Ответ 6

вы можете установить переменную среды JAVA_TOOL_OPTS, как показано ниже, которая будет выбрана JVM для любого приложения.

установить JAVA_TOOL_OPTS = -Djava.net.preferIPv4Stack = true

Вы можете установить это из командной строки или установить в переменных системной среды, исходя из ваших потребностей. Обратите внимание, что это отразится на всех Java-приложениях, запущенных на вашем компьютере, даже если это Java-интерпретатор, который у вас есть в частной настройке.