Действительно ли модальные диалоговые окна являются хорошей практикой для сети? [закрытый]

Что такое 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 ).

17
задан Bill the Lizard 8 August 2012 в 14:47
поделиться

6 ответов

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

С чисто доступной точки зрения, они не являются настолько великими. Они обычно требуют JavaScript, и, из-за способа, которым моделями управляют относительно DOM, программы для чтения с экрана не интерпретируют их хорошо. Для борьбы с этим это всегда - хорошая идея ухудшиться корректно - одно предложение состоит в том, чтобы взять содержание модального диалогового окна и поместить его на странице. Каждый раз, когда модальное диалоговое окно должно появляться, иметь текущее перенаправление страницы к 'модальной странице', вводить пользователя и возвращаться к странице, это шло.

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

14
ответ дан 30 November 2019 в 14:06
поделиться

Я только использую окна Modal на веб-приложениях для простых вопросов или действий, которые требуют пользователя полная концентрация, именно это Модальный для, для "упущения фона" и концентрата в том, что приложения спрашивает...

примеры:

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

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

материал как этот :)

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

надежда это помогает

1
ответ дан 30 November 2019 в 14:06
поделиться

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

0
ответ дан 30 November 2019 в 14:06
поделиться

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

0
ответ дан 30 November 2019 в 14:06
поделиться

Большинство проблем диалоговых окон на веб-центре на плохой реализации. Некоторые соображения включают:

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

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

0
ответ дан 30 November 2019 в 14:06
поделиться

Кажется, многие путают модальное окно с многослойной панелью. Диалоговое окно может быть модальным окном, а всплывающее окно - модальным окном. Многослойная панель не является окном, но имеет вид всплывающего или диалогового окна. Это модально в том смысле, что нижележащие слои недоступны. Модальные окна популярны на веб-сайтах, потому что они невосприимчивы к блокировщикам всплывающих окон.

Модальные окна были разработаны для получения информации или действий пользователя, которые требуются базовому приложению для продолжения работы. Немодальные окна позволяют пользователю переключаться между окном и базовым приложением. Хорошим применением для немодального окна может быть справка по экрану или учебное пособие, где пользователю нужен справочный инструмент и доступ к базовому приложению.

IMHO, модальные окна были разработаны для узкой конкретной цели и сейчас часто используются ненадлежащим образом. То, что вы можете что-то делать, не означает, что вы должны!: -)

2
ответ дан 30 November 2019 в 14:06
поделиться
Другие вопросы по тегам:

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