Выбирая между Ajax, Flex и [закрытой] 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 ).

11
задан JJJ 20 July 2012 в 07:09
поделиться

5 ответов

Вот быстрое краткое изложение каждой области (с большим количеством полезных ссылок):

Межплатформенная совместимость

Ajax работает в любом современном браузере, который может выполнить JavaScript. Flex требует Flash или чего-либо еще, что может обработать SWFs, но, после того как это установлено, это - общее количество freeride до совместимости. Silverlight является хитрой и недооцененной, так тщательно рассматривают Вашу базу пользователей прежде, чем идти с этим набегом MS в богатую гонку вооружений веб-приложений. Также имейте в виду, что Silverlight все еще в бета-версии, таким образом, это может стать более широко используемым и установленным в будущем, поскольку это разрабатывается.

Производительность

Я боюсь создания слишком многих операторов о производительности, потому что это действительно зависит от того, сколько Вы готовы оптимизировать и точный характер Вашего приложения. Кроме того, некоторые технологические стеки просто никогда не будут очень быстрыми. Некоторые люди там делали сравнения, но снова, это зависит от очень многих факторов (даже версия браузера, от которого Вы тестируете!). Вероятно, лучше выбрать на основе других факторов и оптимизировать, после того как Вы начали разрабатывать.

Инструменты разработчика

Существует "золотой стандарт" dev инструменты для каждого из трех:

  • Ajax имеет в основном неограниченные опции, в зависимости от остальной части Вашей технологии и возможностей выбора архитектуры. Большие вопросы, с которыми Вы на самом деле сталкиваетесь, - какие библиотеки положиться, и Google озвучил вполне прилично принятый ответ с вещами как веб-Инструментарий. Когда Вы разбираетесь вниз к нему, это - просто XML и JavaScript, правильно?

  • Flex от Adobe и, точно так же, как с разработкой Flash, необходимо придерживаться их инструментов собственной разработки, потому что - хорошо - они делают стандарты, как они продвигаются.

  • Microsoft расположила версии 2.0 и 2.5 Microsoft Expression Blend для разработки UI Silverlight 1.0 и 2 приложений соответственно. Visual Studio 2008 может использоваться, чтобы разработать и отладить приложения Silverlight (из Википедии).

Общественная поддержка

Существует и официальная и неофициальная общественная, корпоративная, и поддержка с открытым исходным кодом всех трех опций. Какой бы ни с Вами уже интегрируют и который делает, Вы чувствовать больше всего дома являетесь очень отдельными вещами, но я дам этот совет: палка с тем, что Вы знаете. Если Вы - разработчик MS и имеете MSDN как Вашу домашнюю страницу, Вы, вероятно, собираетесь думать, документация Silverlight и форумы действительно полезны. Flex имеет очень похожую историю; форумы довольно хороши и если Вы уже - человек Flash, Вы собираетесь быть прямо дома с их документацией и пользовательским сообществом.

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

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

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

Выбор должен, по-моему, главным образом быть основан на природе приложения, которое Вы будете создавать (например, если необходимо управлять векторной графикой, Ajax в значительной степени отсутствует), но вот некоторые общие руководящие принципы:

Повсеместность

  1. Ajax - Поддерживаемый всеми современными браузерами через платформы
  2. Flex - Время выполнения (Flash player) имеет очень широкую установленную основу для Windows, Mac OS, Linux. Версия Linux была небольшим багги в прошлый раз, когда я проверил, хотя
  3. Silverlight - Время выполнения довольно низко установило основу (и никакая поддержка Linux) в данный момент

Выбор языка программирования

(Unordeded из-за субъективности, но примечание, что Silverlight предлагает большую часть выбора. Также обратите внимание, что существующий опыт языка разработчиков в Вашей команде должен быть принят во внимание.)

  • Silverlight: Любой язык.NET (C#, Visual Basic, IronPython(?), IronRuby(?)) (и XAML для определения UI)
  • Ajax: JavaScript (и XHTML для определения UI)
  • Flex: ActionScript 3 (и MXML для определения UI)

Устойчивость API и совместимость

  1. Flex - Время выполнения является тем же через платформы и браузеры, более сформировавшиеся и стабильные в данный момент, чем Silverlight
  2. Silverlight - Время выполнения является тем же через платформы и браузеры, менее сформировавшиеся, чем Flex/Flash, v2.0 все еще в бета-версии
  3. Ajax - проблемы Совместимости через браузеры (может быть смягчен через библиотеки Ajax, хотя),

Интеграция сети/Браузера

  1. Ajax - Содержание является собственным внутренним браузером, на основе стандартов: доступный для поиска браузером и поисковыми роботами поисковой системы согласно любым стандартным методам UI система просмотра и операционная система установили
  2. Flex и Silverlight - Содержание, не собственное к браузеру (т.е. выполнения в его собственной небольшой "песочнице/прямоугольнике"): не обязательно подвергают установленным методам UI для данной платформы

Инструменты разработчика

  1. Ajax - Ваш любимый редактор кода, браузер и отладка инструментария для браузера
  2. Flex - Flex SDK доступен для Windows, Mac OS и Linux бесплатно и может использоваться с Вашим любимым редактором кода. Отладчик Командной строки включен, но обеспеченный Adobe профилировщик только доступен в коммерческом Flex Builder IDE
  3. Silverlight - AFAIK, SDK доступен для Windows бесплатно и может использоваться с Вашими любимыми средствами разработки.NET
5
ответ дан 3 December 2019 в 05:36
поделиться

Веб-время выполнения как Flex и Silverlight все предложение соблазнительные вещи, но идут с двумя большими затратами:

  • Они работают только в прямоугольнике на странице и не взаимодействуют с нормальными веб-виджетами
  • Они только доступны людям, которым установили тот плагин

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

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

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

Моим собственным ответом до сих пор всегда был JavaScript/Ajax, но я переоценил бы это в любом новом проекте.

2
ответ дан 3 December 2019 в 05:36
поделиться

Что является Вашей аудиторией: общедоступный сайт или приложение бизнеса интранет? Уровни принятия не релевантны, если у Вас есть управляемая аудитория, которая установит то, что необходимо для запущения приложения. Однако при необходимости в самой многочисленной аудитории, чтобы заставить сеть запустить успех затем, это может быть очень важно.

Какова Ваша цель? Создание чего-то для самой низкой цены? Изучение новой технологии?

Можно ли усилить существующие навыки? Если Вы уже знаете.NET затем, Silverlight получает повышение. Изучение Flex может быть интересным и полезным, но действительно ли это более полезно для Вас, чем больше опыта с технологиями.NET? Не забудьте рассматривать альтернативные издержки изучения чего-то полностью нового.

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

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

Кроме того, что было уже упомянуто здесь, другая огромная вещь рассмотреть - то, чем будет Ваш UI.

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

  • JavaScript/HTML - Никакая собственная поддержка чего-либо вне вещей основные выпадающие поля, кнопки и текстовые поля. Если Вы захотите что-то как древовидное управление или управление вкладкой затем, то Вы будете иметь к самокрутке или найдете стороннюю библиотеку.

  • Adobe ActionScript - Собственная поддержка огромного количества усовершенствованных средств управления UI

  • Silverlight - 1.0 имел очень ограниченные средства управления UI, но 2.0 будет добавлять намного больше, и я уверен, что мы продолжим видеть средства управления, добавленные в будущих выпусках.
0
ответ дан 3 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

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