嗨
我们有一个巨大的Windows应用程序,异常处理很差。应用程序抛出许多地方的对象引用错误,并且系统错误消息向用户显示,因为它使用消息框。对象引用的自定义消息未设置为对象的实例
我要寻找一个简单的解决方案,可用于替换此消息,一些用户友好的整个应用程序
谢谢...
嗨
我们有一个巨大的Windows应用程序,异常处理很差。应用程序抛出许多地方的对象引用错误,并且系统错误消息向用户显示,因为它使用消息框。对象引用的自定义消息未设置为对象的实例
我要寻找一个简单的解决方案,可用于替换此消息,一些用户友好的整个应用程序
谢谢...
@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
如果(字符串。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";
}
}
而在代码你在哪里USNG尝试捕捉使用
try
{
throw new MyException("check");
}
catch (MyException ex)
{
MessageBox.Show(ex.customMessage);
}
当你捕获异常并显示消息框,你只需要在消息框中写一个友好的消息。我不认为显示异常消息是一个好主意 - 它可以泄露恶意用户可能用来攻击应用程序的应用程序结构信息。
**附加**
无论哪种方式,这是一个很大的变化。您可以在很多地方重写该例外情况,或者在很多地方重写显示错误消息。我可以建议您将错误消息的显示合并到一个地方,因此当您需要新的错误消息时,您有一个地方可以去,因此将来有一个地方需要更改。
您需要捕获遗留应用程序抛出的异常,并在某些日志文件中记录该异常,并根据发生的异常显示适当的用户友好消息。
例如,您可以显示“应用程序无法找到文件xyz”,而不是显示FileNotFound异常消息以及堆栈跟踪,而不是显示。在Global.asax中
使用Application_Error事件如果是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");
}
}
在WinForms应用程序,你可以使用类似的技术用于显示用户友好的错误消息中描述here。
这就是说,由于空引用异常的唯一原因是开发人员的错误,有一个强大的代码味道,该应用程序有很多的整体问题。我会建议至少在异常处理程序中放置一个记录器,以防止错误发生。
你有源代码访问?或只是二进制文件? – 2010-12-01 09:05:10
yap source code is ther ..但是改变代码的同时警报显示将会有很大的变化,因为它在很多地方都是如此。我正在寻找一种方法来重写异常类或东西,并发送一个友好的消息,而不是Obejct参考错误消息。 – 2010-12-01 09:11:49