Java: возвраты System.getProperty(“user.home”) “?”

Что касается теперь, функциональные языки не используются в большой степени для промышленных проектов, таким образом, недостаточно серьезной работы входит в оптимизаторы. Кроме того, оптимизация обязательного кода для обязательной цели является, вероятно, легче путем.

Функциональные языки имеют один подвиг, который позволит им превзойти императивные языки действительно скоро теперь: тривиальное распараллеливание.

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

стоимость устойчивой многопоточности на агностическом потоком языке как C является чрезмерной многим проектам.

25
задан digitalbreed 1 October 2009 в 13:44
поделиться

6 ответов

Это немного смущает, но решение было просто использовать 64-битный JDK в 64-битной системе. Я скопировал все со своей старой машины, что означало также 32-битный JDK, и в этом была проблема. Он работал должным образом с 64-разрядной средой выполнения.

Извините за беспокойство.

32
ответ дан 28 November 2019 в 20:49
поделиться

Обходной путь, а не решение. Вы можете установить его, добавив в качестве аргумента -Duser.home = $ HOME .

java -Duser.home=$HOME Test
10
ответ дан 28 November 2019 в 20:49
поделиться

А как насчет других гарантированных свойств? Что произойдет, если вы вызовете что-то вроде следующего?


   public static void printAllGuaranteedProperties() {
       printAProperty ("java.version", "Java version number");
       printAProperty ("java.vendor", "Java vendor specific string");
       printAProperty ("java.vendor.url", "Java vendor URL");
       printAProperty ("java.home", "Java installation directory");
       printAProperty ("java.class.version", "Java class version number");
       printAProperty ("java.class.path", "Java classpath");
       printAProperty ("os.name", "Operating System Name");
       printAProperty ("os.arch", "Operating System Architecture");
       printAProperty ("os.version", "Operating System Version");
       printAProperty ("file.separator", "File separator");
       printAProperty ("path.separator", "Path separator");
       printAProperty ("line.separator", "Line separator");
       printAProperty ("user.name", "User account name");
       printAProperty ("user.home", "User home directory");
       printAProperty ("user.dir", "User's current working directory");
    }
    public static void printAProperty (String propName, String desc) {
       System.out.println ("Value for '" + desc + "' is '" + System.getProperty(propName) + "'.");
    }

3
ответ дан 28 November 2019 в 20:49
поделиться

wds находится прямо в его / ее комментарии . Значение user.home похоже взято из / etc / passwd. Какая у вас строка в / etc / passwd для вашего пользователя?

Если я изменил запись на / home / nonexisting , класс Test напечатал / home / nonexisting . У вас случайно есть ? в / etc / passwd?

2
ответ дан 28 November 2019 в 20:49
поделиться

Это действительно интересно. Похоже, что свойство user.home не взято из переменной среды $ HOME. Я пробовал это:

$ echo $HOME && java Test && unset HOME && echo $HOME && java Test
/home/grzole
/home/grzole

/home/grzole

Обратите внимание, что оболочка забывает значение переменной HOME, а Java - нет.

EDIT: Я подозреваю, что Java просто берет префикс / home / и добавляет имя пользователя. Подумайте вот о чем:

# adduser b
...
# rm -fr /home/b
# su - b
No directory, logging in with HOME=/
$ cd /tmp/jb
$ java Test
/home/b

Может быть, у вас вообще нет каталога / home в вашей файловой системе?

1
ответ дан 28 November 2019 в 20:49
поделиться

Need to pore through the native code to figure out what exactly is happening. The user.home variable is set by the "PAM" modules in Linux systems and if the module in use generates these dynamically and the Java implementation is trying to get the value without explicitly using PAM then the behaviour is unpredictable hence the "?"

1
ответ дан 28 November 2019 в 20:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: