Пользовательское сообщение для ссылки на объект не установлено для экземпляра объекта - PullRequest
1 голос
/ 01 декабря 2010

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

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

Спасибо ...

Ответы [ 5 ]

2 голосов
/ 01 декабря 2010

@ Anz: Неправильно использовать обработку исключений в любом месте кода, поэтому всегда помните об этом, и вы должны знать, что означает все различные типы исключений.В вашем сценарии вы получаете «Исключение ссылки на объект», и основная причина этого исключения состоит в том, что вы не проверяете ноль при доступе к переменной, как

Exa_1: -

DataSet ds;

теперь, если я получу доступ к нему как ds.Table.count (), он выдаст исключение, поэтому здесь мы должны использовать

DataSet ds;

 If(ds!=null)
 {
   int val = ds.Table.count();
 } 

Exa_2: -

     string strVariable=txtInput.Text;

     int number = Convert.Int32(strVariable); // here if txtInput.Text is empty them     it will through exception so here we can use

if (! String.IsNullOrEmpty (strVariable)) int number = Convert.Int32 (strVariable);

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

public class MyException : Exception
{
    public string customMessage;
    public MyException(string sourceName)
    {
        customMessage = sourceName + " can not be null";
    }
    public MyException()
    {
        customMessage="ObjectReferenceException";
    }        
}

И в кодегде вы используете попробовать поймать использовать

        try
        {

            throw new MyException("check");
        }
        catch (MyException ex)
        {
            MessageBox.Show(ex.customMessage);
        }
1 голос
/ 01 декабря 2010

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

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

1 голос
/ 01 декабря 2010

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

** Дополнительно **

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

0 голосов
/ 01 декабря 2010

использовать событие Application_Error в global.asax, если это приложение Asp.Net

 Application_Error

 {
   HttpContext context = HttpContext.Current;

   Exception ex = context.Server.GetLastError();
  //process your exception

    if ( context.IsCustomErrorEnabled )
   {
      context.Server.ClearError();
      context.Server.Transfer( "~/error.aspx" );
   }
 }
0 голосов
/ 01 декабря 2010

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

Например, вместо отображения сообщения об исключении FileNotFound вместе со stacktraceВы можете просто показать "Приложение не может найти файл XYZ".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...