Ответ 1
Вы можете использовать System.setProperty("java.net.preferIPv4Stack" , "true");
Это эквивалентно передаче его в командной строке через -Djava.net.preferIPv4Stack=true
Мне нужно отключить IPv6. Для этого в документации по java указано значение свойства jvm java.net.preferIPv4Stack=true
.
Но я не понимаю, как это сделать из самого кода.
Многие форумы продемонстрировали это из командной строки, но мне нужно сделать это во время выполнения.
Вы можете использовать System.setProperty("java.net.preferIPv4Stack" , "true");
Это эквивалентно передаче его в командной строке через -Djava.net.preferIPv4Stack=true
Другой подход, если вы в отчаянии и не имеете доступа к (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".
Я столкнулся с этой проблемой, пытаясь отправить почту с помощью javax.mail из веб-приложения на веб-сервере под управлением Java 7. Внутренние адреса почтового сервера не удались с "недоступной сетью", несмотря на то, что telnet и ping работают с одного и того же хоста, и в то время как внешние почтовые серверы работали. Я попробовал
System.setProperty("java.net.preferIPv4Stack" , "true");
в коде, но это не удалось. Таким образом, значение параметра, вероятно, было ранее кэшировано системой. Установка аргумента VM
-Djava.net.preferIPv4Stack=true
в запуске веб-сервера script.
Еще одно доказательство: в очень небольшой целевой тестовой программе установка системного свойства в коде действительно работала. Таким образом, параметр, вероятно, кэшируется при использовании первого Socket, возможно, не только при запуске JVM.
а,
Я использовал 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
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
вы можете установить переменную среды JAVA_TOOL_OPTS, как показано ниже, которая будет выбрана JVM для любого приложения.
установить JAVA_TOOL_OPTS = -Djava.net.preferIPv4Stack = true
Вы можете установить это из командной строки или установить в переменных системной среды, исходя из ваших потребностей. Обратите внимание, что это отразится на всех Java-приложениях, запущенных на вашем компьютере, даже если это Java-интерпретатор, который у вас есть в частной настройке.