Хорошим местом для начала является 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 ).
Зависит от Ваших целей. Если портал администрирования является частью приложения и будет только использоваться от компьютеров, где Ваше приложение установлено, существует много преимуществ движения полностью Silverlight - или даже WPF.
Но если Вы видите сценарий, где он будет использоваться или от случайного ПК или случайным человеком, полностью функциональная версия HTML/Javascript абсолютно необходима.
Некоторые причины:
ASP полностью. Необходимо только использовать Silverlight/флэш-память и т.д., когда текст не может сделать то, что Вы хотите, чтобы это сделало - например, отобразило видео.
Я определенно пошел бы для полного приложения Silverlight, особенно если у Вас есть хороший опыт от WPF. Вы сможете снова использовать свое знание от WPF и должны смочь взять Silverlight справедливо быстро. Я работал с Silverlight начиная с Беты 1, и текущая Бета 2 имеет твердое качество. Я предполагаю, что безопасно предположить, что версия RTW просто за углом.
Pilf имеет некоторый актуальный вопрос, особенно вокруг печати. Для этого я, вероятно, использовал бы SQL Reporting Services или некоторую другую платформу создания отчетов, на стороне сервера, и затем открылся бы новое окно с печатаемыми отчетами. Для соединения и установки закладки проблем не отличаются, чем какое-либо другое приложение Ajax. Я сделал сообщение в блоге сегодня о том, как обеспечить глубоко соединение и заднюю вперед навигацию в Silverlight.
Silverlight также имеет все рычаги, необходимые для большой поддержки доступности как Автоматизация UI, которая API от WPF принесен в Silverlight. Я не знаю, нагнали ли поставщики для чтения с экрана уже. Поддержка моделирования/шаблона в Silverlight помогает предоставить высококонтрастную кожу визуальным пользователям, которым повреждают, если это - беспокойство.
Я соглашаюсь с тем, что все сказали до сих пор, и я думаю эта Блок-схема, которая нацелена на Flash, также относится к Silverlight.
Я рекомендовал бы против создания чистого сайта Silverlight.
Silverlight страдает от тех же проблем, как Flash делает: неинтуитивная Установка закладки, проблемы с печатью, проблемы доступности, не рабочие кнопки "Назад" и так далее.
Кроме того, Вы потребовали бы, чтобы Ваши пользователи установили Silverlight или по крайней мере имели способность установить его.
В управляемом environements (например, в крупных компаниях или здравоохранении) или на мобильных устройствах, это не могло бы иметь место.
По теме удаленного andministrators другой плакат указал, что это было аргументом в пользу HTML, если администраторы были на медленном соединении. Я утверждал бы, что в зависимости от типа информации, может быть более эффективно использовать Silverlight. Если у Вас есть ASP.NET datagrid заполненный с серверной привязкой данных, можно загружать тонну данных состояния отображения и разметки. Даже если Вы будете использовать альтернативу DataGrid, это легче на ViewState, то у Вас все еще будет много HTML для загрузки.
В Silverlight, после того как Вы свалили XAP, который, вероятно, будет меньшим, чем соответствующий HTML, кэшируется XAP и таким образом, у Вас не должно быть той стоимости каждый раз, и Вы будете просто получать сами данные.
Для другого примера скажем, у Вас есть набор выпадающих списков на одной из Ваших форм, которые у всех есть те же значения в списке. В Silverlight можно получить эти значения однажды и связать их со всем раскрытием, в HTML необходимо будет повторить их каждый раз.
Это поправится с клиентской привязкой данных в ASP.NET, который следует очень похожей модели к Silverlight и WPF для привязки данных.
В целом, я также думал бы, что необходимо будет написать меньше кода для реализации Silverlight, которая может повысить производительность и уменьшить затраты maintenace.
Это кажется, что Ваша проблема состоит в том, что Вам нужно приложение администрирования толстого клиента. Почему бы не использовать щелчок однажды?
Используя плагин для Вашего веб-сайта заставляет его замедлиться и требует, чтобы пользователь установил плагин. Silverlight, например, исключает всего пользователя Linux. Кроме того, так как Silverlight является довольно новой, нет никакого сообщения, как зафиксированная Microsoft должна будет поддержать платформу, если она скоро не берет.
Я придерживался бы простого HTML с серверными сценариями.
Кроме того, для общедоступных веб-сайтов: Flash и Silverlight не могут быть индексированы никакой поисковой системой, таким образом, удача с записью тонн метаданных, если Вы хотите каких-либо посетителей вообще.
Silverlight является хорошим выбором для стоящего внутренним образом портала, как это было бы для общедоступного портала, если Вы уже оценили свой проект и решили продвинуться с веб-порталом. Вы свободны интегрировать компоненты Silverlight в рамках существующего приложения ASP.NET (т.е. "острова богатства") подход, но если у Вас есть способность разработать новый проект с нуля, не обесценивайте полностью решение Silverlight как допустимый выбор, где Вы имели бы, пошел с традиционным порталом ASP.NET. Silverlight является RTW теперь, поэтому если это решение находится все еще на таблице, Вы знаете, что не должны будете иметь дело с повреждением продвижения изменений.
Предыдущие комментарии имели дело с большинством оборотных сторон использования Silverlight для сайта как это, и я соглашаюсь. Если Вы полны решимости иметь разработку стиля толстого клиента, и Ваша аудитория является малочисленной (только для администраторов) затем, я, вероятно, рекомендовал бы WPF по Silverlight, поскольку она в настоящее время обеспечивает более богатый набор инструментов и средств управления.
Если Вы придерживаетесь ASP.NET, посмотрели на Вас Динамические Данные - это идеально для создания сайтов управления бэкендом с небольшим усилием.
Я видел "Silverlight только" веб-сайты в Microsoft, и они являются довольно впечатляющими. Но снова, демонстрации были там для использования полного потенциала того, что может сделать Silverlight. Момент Вам нужно что-то другое, которое можно не повезти. Я не вижу Silverlight как Flash кроме способа, которым они устанавливаются/видятся. Но бэкенд Flash/ActionScript действительно плох по сравнению с тем, что Visual Studio может предложить с.NET
Спросите себя, почему хотели бы Вы использовать Silverlight? Необычные эффекты или модель программирования?
Существуют некоторые оборотные стороны с разработкой сайта полностью в Flash / Silverlight, но если те оборотные стороны не будут иметь значения для Вас или не окажут влияние затем нет ничего останавливающего Вас. Выберите любой инструмент, Вы думаете, удовлетворяет Ваши потребности более полно. Я не был бы помещен от создания сайта просто в Silverlight на основе оборотных сторон, потому что это приносит намного больше положительных сторон к пользовательскому опыту.