Хорошим местом для начала является JavaDocs . Они охватывают это:
Брошено, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
- Вызов метода экземпляра нулевого объекта.
- Доступ или изменение поля нулевого объекта.
- Выполнение длины null, как если бы это был массив.
- Доступ или изменение слотов с нулевым значением, как если бы это был массив.
- Бросать нуль, как если бы это было значение Throwable.
Приложения должны бросать экземпляры этого класса для указания других незаконных видов использования нулевого объекта.
blockquote>Также, если вы попытаетесь использовать нулевую ссылку с
synchronized
, который также выдаст это исключение, за JLS :SynchronizedStatement: synchronized ( Expression ) Block
blockquote>
- В противном случае, если значение выражения равно 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 = "";
Либо метод
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 ).
Я изучил это вполне немного, и здесь являюсь некоторыми наилучшими вариантами, которые я нашел. Для ссылки моим выбором был HelpSpot для в целом, но SupportTrio имеет превосходное предложение, и существует абсолютно бесплатная версия (ограниченное количество пользователей).
SupportTrio (бесплатные или заплаченные доступные версии)
Средство отслеживания Запроса (иначе. RT)
Hope, которая помогает!
В мире под рукой! Сравнение систем отслеживания задач
Вы попробовали эти , Открывают Ticket Request System ?
Это обеспечивает
РЕДАКТИРОВАНИЕ: @Thomasschaaf, просто видел Ваше редактирование: Тогда OTRS не мог бы соответствовать 100% Ваши потребности. Это имеет действительно много функций. Но возможно можно ли дать немного больше информации что не так с электронным билетом?
На работе мы используем Средство отслеживания Запроса , и у меня есть почти только хороший опыт с использованием его. Это записано в Perl и легкое настроить с Apache/Lighttpd (единственные веб-серверы, я попробовал его). Его легкое для интеграции с электронной почтой и использования локальных перенаправлений электронной почты и внешних/локальных почтовых серверов POP.
Его довольно легкое, чтобы установить и использовать, и его не в Вашей поверхности, когда Ваше использование его на ежедневной основе. Но это также легко hackable.
Когда osTicket перемещаются в программное обеспечение уместности, группа стороны взяла последнюю из версий с открытым исходным кодом, и теперь продолжите его под именем aTicket.
Они делают очень хорошее задание, и именно все функции osTicket имели, прежде чем они обратились к темной стороне. Я использую электронный билет для всех своих веб-запросов в службу поддержки хоста, и я не испытал затруднений из-за него.
OTRS основан на Perl, хорошо поддерживается. RT стар. Bugzilla очень мощен. Trac также билеты включений, но вероятно не усовершенствованный достаточно для того, что Вы хотите.
Видят эта категория WP для больше
, Вы, вероятно, хотите быть более конкретными в своем запросе.
Близнецы очень легко установить и использовать. Это свободно для 5 пользователей.
Вот хорошее сравнение различных систем в Википедии:
http://en.wikipedia.org/wiki/Comparison_of_issue_tracking_systems
Другое бесплатное и простое решение совместно использовало бы учетную запись IMAP. Большинство MUAs (Почтовый агент пользователя, такой как Outlook, Thunderbird...) поддерживает потоки, таким образом, Вы могли даже сделать, чтобы они организовали ответы и т.д. В некотором роде. Преимущество IMAP состояло бы в том, что несколько человек могли совместно использовать его, и он будет синхронизировать ответы, и т.д. без дополнительного необходимого программного обеспечения, но MUA.
Или если Вы используете Google Apps For Your Domain , тогда я предполагаю, что это сделано на их вкладках разговора, и т.д. (при использовании веб-почты).
Другое решение могло бы быть FogBugz или учетная запись lighthouseapp. Они являются свободными (например, FogBugz максимум для двух человек) и вообще безболезненными, потому что они размещаются, и т.д. и можно сконцентрироваться на электронной почте. Они оба позволяют Вам автосоздавать случаи/билеты из входящей электронной почты.
Что Вам не нравится [приблизительно 110] http://stackoverflow.uservoice.com/ ? Как насчет http://getsatisfaction.com/ редактирование Видит http://www.37signals.com/svn/posts/1650-get-satisfaction-or-else для деталей способа, которым они занимаются бизнесом - не симпатичный. / редактирование
Для саморазмещенного, я Средство отслеживания Ошибки Богомола вентилятор. Страница Wikipedia, уже упомянутая, является хорошей начальной точкой.