Почему не там Сервер Основы Команды Express Edition?

Что такое NullPointerException?

Хорошим местом для начала является JavaDocs . Они охватывают это:

Брошено, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  • Вызов метода экземпляра нулевого объекта.
  • Доступ или изменение поля нулевого объекта.
  • Выполнение длины null, как если бы это был массив.
  • Доступ или изменение слотов с нулевым значением, как если бы это был массив.
  • Бросать нуль, как если бы это было значение Throwable.

Приложения должны бросать экземпляры этого класса для указания других незаконных видов использования нулевого объекта.

Также, если вы попытаетесь использовать нулевую ссылку с synchronized, который также выдаст это исключение, за JLS :

SynchronizedStatement:
    synchronized ( Expression ) Block
  • В противном случае, если значение выражения равно null, NullPointerException.

Как это исправить?

Итак, у вас есть NullPointerException. Как вы это исправите? Возьмем простой пример, который выдает NullPointerException:

public class Printer {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer();
        printer.print();
    }
}

Идентифицирует нулевые значения

. Первый шаг - точно определить , значения которого вызывают исключение . Для этого нам нужно выполнить некоторую отладку. Важно научиться читать stacktrace . Это покажет вам, где было выбрано исключение:

Exception in thread "main" java.lang.NullPointerException
    at Printer.printString(Printer.java:13)
    at Printer.print(Printer.java:9)
    at Printer.main(Printer.java:19)

Здесь мы видим, что исключение выбрано в строке 13 (в методе printString). Посмотрите на строку и проверьте, какие значения равны нулю, добавив протоколирующие операторы или используя отладчик . Мы обнаруживаем, что s имеет значение null, а вызов метода length на него вызывает исключение. Мы видим, что программа перестает бросать исключение, когда s.length() удаляется из метода.

Трассировка, где эти значения взяты из

Затем проверьте, откуда это значение. Следуя вызовам метода, мы видим, что s передается с printString(name) в методе print(), а this.name - null.

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

Где установлен this.name? В методе setName(String). С некоторой дополнительной отладкой мы видим, что этот метод вообще не вызывается. Если этот метод был вызван, обязательно проверьте порядок , что эти методы вызывают, а метод set не будет называться после методом печати. ​​

Этого достаточно, чтобы дать нам решение: добавить вызов printer.setName() перед вызовом printer.print().

Другие исправления

Переменная может иметь значение по умолчанию setName может помешать ему установить значение null):

private String name = "";

Либо метод print, либо printString может проверить значение null например:

printString((name == null) ? "" : name);

Или вы можете создать класс, чтобы name всегда имел ненулевое значение :

public class Printer {
    private final String name;

    public Printer(String name) {
        this.name = Objects.requireNonNull(name);
    }

    public void print() {
        printString(name);
    }

    private void printString(String s) {
        System.out.println(s + " (" + s.length() + ")");
    }

    public static void main(String[] args) {
        Printer printer = new Printer("123");
        printer.print();
    }
}

См. также:

Я все еще не могу найти проблему

Если вы попытались отладить проблему и до сих пор не имеете решения, вы можете отправить вопрос для получения дополнительной справки, но не забудьте включить то, что вы пробовали до сих пор. Как минимум, включите stacktrace в вопрос и отметьте важные номера строк в коде. Также попробуйте сначала упростить код (см. SSCCE ).

20
задан jessehouwing 17 December 2016 в 10:41
поделиться

10 ответов

Нет, из памяти что-либо Команда основанные на основе затраты несколько раз больше, чем профессиональные версии. Это - то, где Microsoft действительно делает свои деньги.

0
ответ дан 29 November 2019 в 22:49
поделиться

Самый простой ответ - то, что TFS не уменьшается достаточно хорошо, чтобы это стоило. TFS очень нацелена на группы разработчиков средних, больших, и огромных размеров, она не разработана хорошо для очень малочисленных команд.

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

я предложил бы использовать SVN с плагин VisualSVN , если Вы требуете управления исходным кодом, которое все делают на дешевом.

Взгляд на него этот путь, Стандарт Visual Studio 2008 года является продуктом за 250$. Сколько из той функциональности существует в, скажем, Визуальном Экспрессе 2008 года C#? По крайней мере, эквивалент ценности за 25$? Скорее всего. По крайней мере 10$ легко. Сервер VSTS 2008 Основы Команды является продуктом за 2 500$. Если бы они сделали тот же объем сокращения функции для создания выпуска TFS Express, то это стоило бы 250$, который является слишком для отдачи бесплатно. Больше, много значения TFS находится в его масштабируемости и базовом наборе функций, который почти невозможно снять для создания упрощенного, более дешевого продукта.

0
ответ дан 29 November 2019 в 22:49
поделиться

Не выпуск рабочей группы TFS несколько исполняют эту 'специальную' роль? 5 пользователей или меньше и цена являются очень 'специальными' когда по сравнению с полной гориллой за 800 фунтов.

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

И люди не должны использовать TFS?? Это похоже на управление исходным кодом высказывания, только для групп и не людей.

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

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

Ну, это - интересный вопрос, но реальный вопрос - каков сценарий использования для такой вещи был бы?

, В частности, я рассматриваю TFS как фокусирующийся в большой степени на поддержке dev команды . (Делает ли это хорошее задание этого или нет, это - другой разговор). Конечно, отдельные разработчики могли извлечь выгоду из вещей как средства управления исходным кодом в TFS, но не ясно, как единственный человек использовал бы в своих интересах большую функциональность в TFS.

И, для чистого управления исходным кодом, уже уже существуют хорошие альтернативы для этого на рынке (способ, которым я вижу его)

кроме того, интересно отметить, что TFS имеет некоторые существенные аппаратные средства, программное обеспечение и требования среды, чтобы я не был уверен, помогли бы единственному человеку разместить; если он не может сэкономить одну машину только для выполнения его (некоторые люди делают это; я нахожу это тратой хорошей машины, сам :)).

И для малочисленных команд, уже существует выпуск TFS WorkGroup, который я предполагаю, так близко, как MS собирается добраться до экспресса TFS.

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

Выпуски Экспресса специально предназначены для людей, которые не имеют доступа или, более прямо, не могут предоставить полные версии Visual Studio, но кто хотел бы разработать в Платформе.NET.

Сервер Основы Команды, с другой стороны, специально предназначено для корпорации , который имеет разработку программного обеспечения, подходит ко многим участникам. Корпорации (ни стартапы) никогда не были целью продукта Экспресса.

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

я не уверен, однако, если конкретно использование выпусков Экспресса в среде команды является нарушением своего EULA. Надежда не :P

13
ответ дан 29 November 2019 в 22:49
поделиться

Я предполагаю, что Вы могли сказать, что существует версия Экспресса! Codeplex! Точно так же, как специальные выпуски Visual Studio имеют определенные ограничения, можно использовать Codeplex бесплатно, но необходимо разработать открытый исходный код.

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

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

я предпочитаю продукты Sourcegear (они свободны для единственных разработчиков) - Хранилище , если Вы просто ищете управление исходным кодом, и Профессионал Хранилища (ранее названный "Крепостью"), если Вы хотите управление исходным кодом наряду с ошибкой и отслеживание объекта работы, которое покрывает большую часть функциональности TFS.

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

Поскольку Microsoft TFS расположения для конкуренции с программным обеспечением как , ClearCase, выпуская свободный выпуск подорвал бы то расположение.

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

Я думаю, причина того, что у Microsoft нет SQL Server Express версии TFS в том, что TFS включает SSAS под обложкой. Я сомневаюсь, что когда-нибудь появится "экспресс" версия SSAS.

0
ответ дан 29 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

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