2012-03-27 3 views
31

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

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

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

+5

Отключение IPv6 для работы с некоторой ошибкой, имеющейся у вас в коде, просто накапливает проблемы на будущее. Исправьте реальную проблему и избавитесь от головной боли позже. – Flexo

+1

Хотелось бы узнать, почему вы считаете, что вам нужно отключить IPv6. Возможно, есть законная причина, но я еще не видел ее ... –

+4

@BrianKnoblauch Вот вы: [authbind] (http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html) работает только с IP4. – maaartinus

ответ

46

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

Это эквивалентно переходу его в командной строке с помощью -Djava.net.preferIPv4Stack=true

+0

Полученный широковещательный адрес по-прежнему 255.255.255.255 –

+3

Это кажется довольно нормальным для IPv4. Это стандартный сетевой широковещательный адрес 0.0.0.0. –

+3

Вы уверены, что это сработает ?. От взгляда на [источник] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/net/InetAddress.java#InetAddress.0preferIPv6Address) кажется мне, что 'java.net.preferIPv4Stack' читается только при запуске JVM, а затем никогда больше. Однако может быть неправильно. – peterh

9

Другой подход, если вы отчаянно и не имеют доступа к (а) кода или (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".

7

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

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

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

-Djava.net.preferIPv4Stack=true 

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

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

2

хорошо,

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

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

Добавьте строку ниже к концу файла $ {JBOSS_HOME} /bin/standalone.conf.летучая мышь (только после того, как :JAVA_OPTS_SET)

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

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

0

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

0

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

набор JAVA_TOOL_OPTS = -Djava.net.preferIPv4Stack = истина

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

Смежные вопросы