2010-12-01 4 views
0

Salut
Nous avons une énorme application Windows avec une mauvaise gestion des exceptions. L'application renvoie l'erreur de référence d'objet à partir de beaucoup de lieux et le message d'erreur système montre aux utilisateurs comme il utilise des boîtes de message.Message personnalisé pour la référence d'objet non définie sur une instance d'un objet

Je suis à la recherche d'une solution simple qui peut être utilisé pour remplacer ce message à l'utilisateur de quelque chose d'amical pour toute l'application

Merci ...

+0

Avez-vous un accès au code source? ou juste les binaires? –

+0

yap le code source est ther .. mais en changeant le code tandis que l'affichage d'alerte sera un changement assez important car il est beaucoup dans les endroits. Je cherche un moyen de remplacer la classe d'exception ou quelque chose et envoyer un message amical au lieu du message d'erreur de référence Obejct .. –

+0

Est-ce une application Windows ou une application web? – SWeko

Répondre

1

@Anz: Ce n'est pas bon à utiliser Gestion des exceptions partout dans le code donc gardez toujours cela à l'esprit et vous devez savoir quelle est la signification de tous les différents types d'exceptions. Dans votre scénario vous obtenez « référence objet Exception » et la raison principale de cette exception est que vous ne vérifiez pas null lors de l'accès variables comme

Exa_1: -

DataSet ds;

maintenant si je l'accès comme ds.Table.count() il donnera exception, donc ici, nous devrions utiliser

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 

si (String.IsNullOrEmpty (strVariable)) int nombre = Convert.Int32 (strVariable);

Et si vous voulez montrer Message personnalisé dans la poignée d'exception, vous pouvez créer votre propre classe d'exception qui remplacera la classe d'exception alors vous pouvez lancer et attraper comme:

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

Et dans le code où vous usng essayer attraper utiliser

 try 
     { 

      throw new MyException("check"); 
     } 
     catch (MyException ex) 
     { 
      MessageBox.Show(ex.customMessage); 
     } 
1

Lorsque vous attrapez l'exception et afficher la boîte de message juste besoin d'écrire un message amical dans la boîte de message. Je ne pense pas que l'affichage de messages d'exception soit une bonne idée - cela pourrait donner des informations sur la structure de votre application qu'un utilisateur malveillant pourrait utiliser pour attaquer l'application.

** ** supplémentaire

Quoi qu'il en soit, il est un grand changement. Vous pouvez remplacer l'exception dans beaucoup d'endroits, ou remplacer l'affichage du message d'erreur dans beaucoup d'endroits. Puis-je suggérer que vous consolidez l'affichage du message d'erreur dans un seul endroit alors quand vous avez besoin de nouveaux messages d'erreur vous avez un endroit où aller, et donc dans le futur, un endroit pour changer si vous avez besoin de le changer.

+0

montrant le message d'erreur est là beaucoup d'endroits dans l'application et sera un assez grand changement .. Je cherche un moyen de remplacer la classe d'exception ou quelque chose et envoyer un message amical au lieu de référence Obejct message d'erreur .. Il n'y a pas de problème de sécurité avec l'affichage car il s'agit d'une application Windows utilisée dans un environnement à utilisateurs limités. –

+0

De toute façon c'est un grand changement. Vous pouvez remplacer l'exception dans beaucoup d'endroits, ou remplacer l'affichage du message d'erreur dans beaucoup d'endroits. Puis-je suggérer que vous consolidez l'affichage du message d'erreur dans un seul endroit alors quand vous avez besoin de nouveaux messages d'erreur vous avez un endroit où aller, et donc dans le futur, un endroit pour changer si vous avez besoin de le changer. –

0

Vous devez capturer l'exception générée par l'application héritée et consigner cette exception dans un fichier journal et afficher un message convivial approprié en fonction de l'exception. Par exemple, au lieu d'afficher le message d'exception FileNotFound avec stacktrace, vous pouvez simplement afficher "Application incapable de trouver le fichier xyz".

0

événement utilisation de Application_Error dans global.asax si elle est une application 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"); 
    } 
} 
1

Dans une application WinForms, vous pouvez utiliser quelque chose comme la technique décrite here pour afficher un message d'erreur convivial. Cela dit, étant donné que la seule raison de l'exception de référence nulle est une erreur de développeur, il y a une forte odeur de code indiquant que l'application a beaucoup de problèmes globaux. Je recommanderais au moins de mettre un logger dans le gestionnaire d'exception que vous allez mettre en place, afin que les erreurs ne passent pas inaperçues.

Questions connexes