Это означает, что ваш код использовал ссылочную переменную объекта, которая была установлена в нуль (т. е. она не ссылалась на экземпляр фактического объекта).
Чтобы предотвратить ошибку, объекты, которые могут быть пустыми, должны быть протестированы для null перед тем, как использовать.
if (myvar != null)
{
// Go ahead and use myvar
myvar.property = ...
}
else
{
// Whoops! myvar is null and cannot be used without first
// assigning it to an instance reference
// Attempting to use myvar here will result in NullReferenceException
}
Это потому, что java -version
записывается в stderr
, а не stdout
. Вы должны использовать:
version=$(java -version 2>&1)
Чтобы перенаправить stderr
на stdout
.
Вы можете увидеть его, выполнив следующие 2 команды:
java -version > /dev/null
java -version 2> /dev/null
version=$(java -version 2>&1)
Параметр версии принимает только одну тире, и если вы переадресовываете stderr, то есть, где написано сообщение, вы получите желаемый результат.
В качестве оповещения, используя две дефисы являются неофициальным стандартом для Unix-подобных систем, но поскольку Java пытается быть почти идентичной на разных платформах, это нарушает ожидания Unix / Linux и ведет себя так же в этом отношении, как и в Windows, и, как я подозреваю, в Mac OS ,