Используя Silverlight для всего веб-сайта?

Что такое NullPointerException?

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

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

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

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

blockquote>

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

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

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

Итак, у вас есть 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 ).

10
задан Samuel Jack 11 September 2008 в 11:34
поделиться

12 ответов

Зависит от Ваших целей. Если портал администрирования является частью приложения и будет только использоваться от компьютеров, где Ваше приложение установлено, существует много преимуществ движения полностью Silverlight - или даже WPF.

Но если Вы видите сценарий, где он будет использоваться или от случайного ПК или случайным человеком, полностью функциональная версия HTML/Javascript абсолютно необходима.

Некоторые причины:

  • У большинства людей нет Silverlight, и Вы заработаете хорошую загрузку клятвы, если они должны загрузить и установить ее. Некоторые люди, которым установили его, сохраняют отключенным (вместе с флэш-памятью, и иногда даже отображает) избегать отвлекающих факторов и ускорять просмотр.
  • Когда сайт HTML перестал работать, пользователь получает ошибочную страницу и перезагрузки. Когда Silverlight перестала работать, она может зависнуть или отказать.
  • HTML - то, что ожидается - и пользователями и веб-браузерами: назад и кнопки Обновить работают, как они должны, гиперссылки и работа форм как ожидалось.
  • Медленный Интернет все еще очень распространен, и в удаленных областях и в мобильных устройствах.
9
ответ дан 3 December 2019 в 13:18
поделиться

ASP полностью. Необходимо только использовать Silverlight/флэш-память и т.д., когда текст не может сделать то, что Вы хотите, чтобы это сделало - например, отобразило видео.

1
ответ дан 3 December 2019 в 13:18
поделиться

Я определенно пошел бы для полного приложения Silverlight, особенно если у Вас есть хороший опыт от WPF. Вы сможете снова использовать свое знание от WPF и должны смочь взять Silverlight справедливо быстро. Я работал с Silverlight начиная с Беты 1, и текущая Бета 2 имеет твердое качество. Я предполагаю, что безопасно предположить, что версия RTW просто за углом.

Pilf имеет некоторый актуальный вопрос, особенно вокруг печати. Для этого я, вероятно, использовал бы SQL Reporting Services или некоторую другую платформу создания отчетов, на стороне сервера, и затем открылся бы новое окно с печатаемыми отчетами. Для соединения и установки закладки проблем не отличаются, чем какое-либо другое приложение Ajax. Я сделал сообщение в блоге сегодня о том, как обеспечить глубоко соединение и заднюю вперед навигацию в Silverlight.

Silverlight также имеет все рычаги, необходимые для большой поддержки доступности как Автоматизация UI, которая API от WPF принесен в Silverlight. Я не знаю, нагнали ли поставщики для чтения с экрана уже. Поддержка моделирования/шаблона в Silverlight помогает предоставить высококонтрастную кожу визуальным пользователям, которым повреждают, если это - беспокойство.

15
ответ дан 3 December 2019 в 13:18
поделиться

Я соглашаюсь с тем, что все сказали до сих пор, и я думаю эта Блок-схема, которая нацелена на Flash, также относится к Silverlight.

enter image description here

Источник изображения

7
ответ дан 3 December 2019 в 13:18
поделиться

Я рекомендовал бы против создания чистого сайта Silverlight.

Silverlight страдает от тех же проблем, как Flash делает: неинтуитивная Установка закладки, проблемы с печатью, проблемы доступности, не рабочие кнопки "Назад" и так далее.

Кроме того, Вы потребовали бы, чтобы Ваши пользователи установили Silverlight или по крайней мере имели способность установить его.

В управляемом environements (например, в крупных компаниях или здравоохранении) или на мобильных устройствах, это не могло бы иметь место.

15
ответ дан 3 December 2019 в 13:18
поделиться

По теме удаленного andministrators другой плакат указал, что это было аргументом в пользу HTML, если администраторы были на медленном соединении. Я утверждал бы, что в зависимости от типа информации, может быть более эффективно использовать Silverlight. Если у Вас есть ASP.NET datagrid заполненный с серверной привязкой данных, можно загружать тонну данных состояния отображения и разметки. Даже если Вы будете использовать альтернативу DataGrid, это легче на ViewState, то у Вас все еще будет много HTML для загрузки.

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

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

Это поправится с клиентской привязкой данных в ASP.NET, который следует очень похожей модели к Silverlight и WPF для привязки данных.

В целом, я также думал бы, что необходимо будет написать меньше кода для реализации Silverlight, которая может повысить производительность и уменьшить затраты maintenace.

3
ответ дан 3 December 2019 в 13:18
поделиться

Это кажется, что Ваша проблема состоит в том, что Вам нужно приложение администрирования толстого клиента. Почему бы не использовать щелчок однажды?

5
ответ дан 3 December 2019 в 13:18
поделиться

Используя плагин для Вашего веб-сайта заставляет его замедлиться и требует, чтобы пользователь установил плагин. Silverlight, например, исключает всего пользователя Linux. Кроме того, так как Silverlight является довольно новой, нет никакого сообщения, как зафиксированная Microsoft должна будет поддержать платформу, если она скоро не берет.

Я придерживался бы простого HTML с серверными сценариями.

Кроме того, для общедоступных веб-сайтов: Flash и Silverlight не могут быть индексированы никакой поисковой системой, таким образом, удача с записью тонн метаданных, если Вы хотите каких-либо посетителей вообще.

1
ответ дан 3 December 2019 в 13:18
поделиться

Silverlight является хорошим выбором для стоящего внутренним образом портала, как это было бы для общедоступного портала, если Вы уже оценили свой проект и решили продвинуться с веб-порталом. Вы свободны интегрировать компоненты Silverlight в рамках существующего приложения ASP.NET (т.е. "острова богатства") подход, но если у Вас есть способность разработать новый проект с нуля, не обесценивайте полностью решение Silverlight как допустимый выбор, где Вы имели бы, пошел с традиционным порталом ASP.NET. Silverlight является RTW теперь, поэтому если это решение находится все еще на таблице, Вы знаете, что не должны будете иметь дело с повреждением продвижения изменений.

1
ответ дан 3 December 2019 в 13:18
поделиться

Предыдущие комментарии имели дело с большинством оборотных сторон использования Silverlight для сайта как это, и я соглашаюсь. Если Вы полны решимости иметь разработку стиля толстого клиента, и Ваша аудитория является малочисленной (только для администраторов) затем, я, вероятно, рекомендовал бы WPF по Silverlight, поскольку она в настоящее время обеспечивает более богатый набор инструментов и средств управления.

Если Вы придерживаетесь ASP.NET, посмотрели на Вас Динамические Данные - это идеально для создания сайтов управления бэкендом с небольшим усилием.

0
ответ дан 3 December 2019 в 13:18
поделиться

Я видел "Silverlight только" веб-сайты в Microsoft, и они являются довольно впечатляющими. Но снова, демонстрации были там для использования полного потенциала того, что может сделать Silverlight. Момент Вам нужно что-то другое, которое можно не повезти. Я не вижу Silverlight как Flash кроме способа, которым они устанавливаются/видятся. Но бэкенд Flash/ActionScript действительно плох по сравнению с тем, что Visual Studio может предложить с.NET

Спросите себя, почему хотели бы Вы использовать Silverlight? Необычные эффекты или модель программирования?

0
ответ дан 3 December 2019 в 13:18
поделиться

Существуют некоторые оборотные стороны с разработкой сайта полностью в Flash / Silverlight, но если те оборотные стороны не будут иметь значения для Вас или не окажут влияние затем нет ничего останавливающего Вас. Выберите любой инструмент, Вы думаете, удовлетворяет Ваши потребности более полно. Я не был бы помещен от создания сайта просто в Silverlight на основе оборотных сторон, потому что это приносит намного больше положительных сторон к пользовательскому опыту.

0
ответ дан 3 December 2019 в 13:18
поделиться
Другие вопросы по тегам:

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