Pag.1 - PowerPoint PPT Presentation

About This Presentation
Title:

Pag.1

Description:

Title: Visual Basic 6 Author: Frank Verhaest Last modified by. Created Date: 8/17/2000 6:54:13 PM Document presentation format: On-screen Show Company – PowerPoint PPT presentation

Number of Views:101
Avg rating:3.0/5.0
Slides: 25
Provided by: Frank527
Category:
Tags: pag

less

Transcript and Presenter's Notes

Title: Pag.1


1
Hoofdstuk 8 Fout afhandeling
  • Inleiding
  • Structured Exception Handling
  • Hoe fouten opvangen
  • Geen foutafhandeling
  • Alle fouten opvangen
  • Specifieke fouten opvangen
  • Throw exceptions
  • Finally block
  • Programmer-Defined Exception Classes

2
8.1 Inleiding
  • Exception
  • Indicatie van een onverwacht probleem at run-time
  • Zonder foutafafhandeling wordt programma
    afgesloten met een run-time error.
  • Waarom aan foutafhandeling bij run-time errors
    doen?
  • Als je niet wilt dat het programma met een
    foutmelding wordt afgesloten
  • een aantal alternatieve acties uitvoeren
  • Je kan eventueel toch verder gaan met de
    uitvoering van het programma
  • of als een andere dan de standaardfoutmelding
    moet verschijnen

3
8.2 Exception Handling Overview
  • VB.NET gebruikt structured exception handling
  • Syntax foutafhandeling (error handling) bij
    exceptions
  • ...
  • Try
  • bevat de code die moet worden uitgeprobeerd, en
    die een fout kan veroorzaken
  • Catch
  • reageren op de uitzonderingen die kunnen
    voorkomen in Try-blok
  • Geparametriseerd vangt specifiek exceptions op
  • Niet geparametriseerd vangt alle exceptions op
  • Finally
  • optioneel blok indien catch blokken bestaan
  • bevat code die altijd moet worden uigevoerd,
    ongeacht welke uitzondering plaatsvindt
  • End Try
  • ...

4
8.2 Exception Handling Overview
  • I.g.v. exception (throw point)
  • Wordt opgevangen door een exception handler (in
    aanroepketen)
  • Fout wordt afgehandeld
  • In het andere geval (geen bijhorende exception
    handler)
  • Debug mode
  • Ignore ga verder met continue execution
  • Break View in debugger
  • Standard execution mode
  • Continue ga verder met uitvoering
  • Quit Beëindig programma

5
8.2 Exception Handling Overview
  • Generatie van fout
  • Voorbeeld openen bestand en lengte bepalen
  • Dim lngSize as Long
  • Dim s as FileStream
  • sFile.open(txtFileName.text, FileMode.Open)
  • lngSize s.Length
  • s.Close()
  • Wat kan er allemaal misgaan?
  • File bestaat niet
  • Pad bestaat niet
  • Drive is niet beschikbaar(netwerkdrive bvb)
  • Je hebt geen rechten om file te openen
  • ...

6
8.3 Afhandelen van fouten
  • Geen foutafhandeling
  • Runtime vangt fout op en geeft melding aan de
    gebruiker

7
8.3 Afhandelen van fouten
  • Afhandelen van alle fouten (1 exceptionhandler)
  • Geven van melding als een fout zich heeft
    voorgedaan
  • Try
  • sFile.open(txtFileName.text, FileMode.Open)
  • lngSize s.Length
  • s.Close()
  • Catch
  • Messagebox.Show(Fout by openen bestand)
  • End Try

8
8.3 Afhandelen van fouten
  • Wat als je wat meer uitleg wenst te geven over de
    fout
  • De Exception klasse in de System namespace bevat
    info over de runtime error
  • Declareer een variabele van het type Exception
  • Try
  • code die een uitzondering kan triggeren
  • Catch ex As Exception
  • Behandel uitzondering, gebruik makend van e
  • End Try
  • Of
  • Dim ex As Exception
  • Try
  • code die een uitzondering kan triggeren
  • Catch ex
  • Behandel uitzondering, gebruik makend van e
  • End Try

9
8.3 Afhandelen van fouten
  • Meer info over fout opvragen adhv
    System.Exception properties
  • Message foutmelding gekoppeld aan uitzondering
  • Default boodschap geassocieerd met exception
    type
  • Gecustomiseerde boodschap doorgegeven aan
    constructor van object
  • Source naam van applicatie of object die fout
    veroorzaakt heeft
  • TargetSite naam methode die fout gegenereerd
    heeft
  • StackTrace exception historiek.1 string die een
    sekwentiële lijst van methodes bevat, die op
    moment dat de exception zich voordoet, nog niet
    volledig zijn uitgevoerd
  • InnerException voor geneste exceptions
  • HelpLink link naar Help file geassocieerd met
    fout
  • ToString retourneert een string met de naam van
    de exception, de exception message, de naam van
    de inner exception en de stack.

10
8.3 Afhandelen van fouten
  • Voorbeeld
  • Try
  • sFile.open(txtFileName.text, FileMode.Open)
  • lngSize s.Length
  • s.Close()
  • Catch e As exception
  • Messagebox.Show(Fout bij openen bestand
    e.message)
  • Messagebox.Show(Fout bij openen bestand
    e.tostring())
  • End Try

11
8.3 Afhandelen van fouten
  • Afhandelen van specifieke fouten(meerdere
    exceptionhandlers)
  • .NET bevat tal van voorgedefinieerde exception
    klassen die afgeleid zijn van de basis klasse
    Exception in de System Namespace
  • In foutafhandeling kan je meerdere catch blokken
    voorzien, die elk een specifieke fout afhandelen
  • Volgorde van catch blokken is belangrijk! Runtime
    gaat op zoek naar eerste catch blok met een type
    fout waarvoor de is een regel geldt.

12
8.3 Afhandelen van fouten
  • Welke exceptions afhandelen?
  • Zoek op in help Elke methode die exceptions
    throwt heeft een sectie exceptions die de
    mogelijke exceptions beschrijft
  • Voorbeeld Exceptionklassen igv openen file
  • SecurityException gebruiker heeft niet de
    vereiste permissies
  • ArgumentException path is leeg, bevat enkel
    blancos of bevat illegale characters
  • FileNotFoundException bestand bestaat niet
  • ArgumentNullException path of mode is een NULL
    verwijzing
  • UnauthorizedAccessException file is read-only
    of file is een pad
  • DirectoryNotFoundException directory niet
    gevonden

13
8.3 Afhandelen van fouten
  • Code
  • Private Sub btnSpecifiekeFouten_Click(ByVal
    sender As System.Object, ByVal e As
    System.EventArgs) Handles btnSpecifiekeFouten.Clic
    k
  • Dim lngSize As Long Dim s As FileStream
  • Try
  • s File.Open(txtFileName.Text,
    FileMode.Open)
  • lngSize s.Length
  • s.Close()
  • Catch ArgumentExceptionParameter As
    ArgumentException
  • MessageBox.Show("You specified an
    invalid filename. )
  • Catch FileNotFoundExceptionParameter As
    FileNotFoundException
  • MessageBox.Show("The file you
    specified can't be found. Please try again.")
  • Catch ArgumentNullExceptionParameter As
    ArgumentNullException
  • MessageBox.Show("You passed in a Null
    argument.")
  • Catch UnauthorizedAccessExceptionParameter
    As UnauthorizedAccessException
  • MessageBox.Show( "You specified a
    folder name, not a file name.")
  • Catch DirectoryNotFoundExceptionParameter
    As DirectoryNotFoundException
  • MessageBox.Show("You specified a
    folder that doesn't exist or can't be found.")
  • Catch SecurityExceptionParameter As
    SecurityException
  • MessageBox.Show("You don't have
    sufficient rights to open the selected file.")

14
8.3 Afhandelen van fouten
  • .NET Exception hierarchy
  • System.Exception
  • Basis class van .NET Framework exception
    hierarchy
  • Daaronder
  • SystemException
  • Basisklasse voor alle exceptions gegenereerd door
    runtime
  • ApplicationException
  • Creatie van exception data types eigen aan
    applicatie
  • Kunnen geworpen worden door applicatie
  • In de help kan je de verdere exception hierarchy
    bekijken

15
8.3 Afhandelen van fouten
  • Raisen van fout
  • Fout laten afhandelen door aanroepende methode(s)
  • Eigen fout definiëren
  • Dmv. Throw laten optreden van een uitzondering
    in procedure die dan wordt opgevangen door
    dichtsbijzijnde uitzonderinghandler in
    aanroepketen
  • Throw de fout die zich zojuist heeft voorgedaan
  • Catch e As Exception
  • Throw()
  • Throw een fout ergens in de code binnen een Try
    blok
  • Throw New FileNotFoundException()
  • Een fout throwen een specifieke boodschap
    meegeven
  • Throw New FileNotFoundException(Kan bestand
    txtFileName.Text _
  • niet openen)
  • Throw New Exception(File not found)

16
8.3 Afhandelen van fouten
  • Hoe gaat runtime op zoek naar handlers indien je
    werkt met geneste Try blokken ?
  • Bij fout wordt de uitvoering van code
    onmiddellijk afgebroken
  • De runtime gaat op zoek naar fouthandler in
    bijhorend catch blokken. Als bijhorende handler
    gevonden wordt, wordt fout afgehandeld en wordt
    verdergegaan met uitvoering van programma
  • Als er geen geschikte handler is voor fout in de
    bijhorende catch blokken, dan wordt de verwerking
    van de omvattende methodes (try blokken)
    afgebroken tot een corresponderende handler
    gevonden
  • Als er geen omvattende try blokken zijn met een
    passende handler, dan handelt de runtime zelf de
    fout af met een runtime error

17
1 ' Properties.vb 2 ' Stack unwinding and
Exception class properties. 3 4 '
demonstrates using properties Message, StackTrace
and 5 ' InnerException 6 Class
CProperties 7 8 Shared Sub Main() 9
10 ' call Method1 any Exception
generatesd will be caught 11 ' in the
Catch block that follows 12 Try 13
Method1() 14 15 ' Output String
representation of Exception, then output 16
' values of properties InnerException, Message
and StackTrace 17 Catch exception As
Exception 18 Console.WriteLine("excepti
on.ToString " _ 19 vbCrLf
"0" vbCrLf, exception.ToString()) 20 21
Console.WriteLine("exception.Message "
_ 22 vbCrLf "0" vbCrLf,
exception.Message) 23 24
Console.WriteLine("exception.StackTrace " _ 25
vbCrLf "0" vbCrLf,
exception.StackTrace) 26 27
Console.WriteLine("exception.InnerException "
_ 28 vbCrLf "0" vbCrLf,
exception.InnerException) 29 30 End
Try 31 32 End Sub ' Main 33
18
34 ' calls Method2 35 Public Shared Sub
Method1() 36 Method2() 37 End Sub 38
39 ' calls Method3 40 Public Shared
Sub Method2() 41 Method3() 42 End
Sub 43 44 ' throws an Exception
containing InnerException 45 Public Shared
Sub Method3() 46 47 ' attempt to
convert String to Integer 48 Try 49
Convert.ToInt32("Not an integer") 50 51
' wrap FormatException in new Exception 52
Catch formatException As
FormatException 53 54 Throw New
Exception("Exception occurred in Method3", _ 55
formatException) 56 57 End
Try 58 59 End Sub ' Method3 60 61
End Class ' CProperties
exception.ToString System.Exception Exception
occurred in Method3 ---gt System.FormatException
Input String was not in a correct format. at
System.Number.ParseInt32(String s, NumberStyles
style, NumberFormatInfo info)
19
at System.Int32.Parse(String s, NumberStyles
style, IFormatProvider provider) at
System.Int32.Parse(String s) at
System.Convert.ToInt32(String value) at
Properties.CProperties.Method3() in
C\books\2001\vbhtp2\ch11\Fig11_03\Properties\Prop
erties.vbline 49 --- End of inner exception
stack trace --- at Properties.CProperties.Metho
d3() in C\books\2001\vbhtp2\ch11\Fig11_03\Propert
ies\Properties.vbline 54 at
Properties.CProperties.Method2() in
C\books\2001\vbhtp2\ch11\Fig11_03\Properties\Prop
erties.vbline 41 at Properties.CProperties.Met
hod1() in C\books\2001\vbhtp2\ch11\Fig11_03\Prope
rties\Properties.vbline 36 at
Properties.CProperties.Main() in
C\books\2001\vbhtp2\ch11\Fig11_03\Properties\Prop
erties.vbline 13   exception.Message Exception
occurred in Method3   exception.StackTrace at
Properties.CProperties.Method3() in
C\books\2001\vbhtp2\ch11\Fig11_03\Properties\Prop
erties.vbline 54 at Properties.CProperties.Met
hod2() in C\books\2001\vbhtp2\ch11\Fig11_03\Prope
rties\Properties.vbline 41 at
Properties.CProperties.Method1() in
C\books\2001\vbhtp2\ch11\Fig11_03\Properties\Prop
erties.vbline 36 at Properties.CProperties.Mai
n() in C\books\2001\vbhtp2\ch11\Fig11_03\Properti
es\Properties.vbline 13 exception.InnerException
System.FormatException Input String was not in
a correct format. at System.Number.ParseInt32(S
tring s, NumberStyles style, NumberFormatInfo
info) at System.Int32.Parse(String s,
NumberStyles style, IFormatProvider provider)
at System.Int32.Parse(String s) at
System.Convert.ToInt32(String value) at
Properties.CProperties.Method3() in
C\books\2001\vbhtp2\ch11\Fig11_03\Properties\Prop
erties.vbline 49
20
8.4 Finally block
  • Bevat code die altijd wordt uitgevoerd
  • Ongeacht het feit of er zich nu een uitzondering
    voordoet of niet
  • Wordt uitgevoerd na de exception handling code en
    voordat de controle wordt teruggegeven aan
    aanroepende methode
  • Optionieel
  • Niet vereist indien 1 of meerdere catch handlers
    bestaan
  • Gebruik?
  • Vrijgeven van resources gebruikt in Try Block
  • Eliminatie van resource leaks

21
8.5 Programmer defined Exception Classes
  • Erven van de klasse ApplicationException in
    namespace System
  • Moeten voldoen aan volgende standaard
  • Klasse naam moet eindigen op Exception
  • Klasse moet 3 exceptions bevatten
  • Default constructor
  • Constructor met 1 input parameter van het type
    String argument
  • De foutmelding
  • Constructor met een String argument en een
    Exception argument
  • De foutmelding
  • Het InnerException object

22
8.5 Programmer defined Exception Classes
  • Voorbeeld van user defined klasse
  • Public Class FileTooLargeException
  • Inherits ApplicationException
  • Private mlngFileSize As Long
  • Public Sub New(ByVal Message As String)
  • MyBase.New(Message)
  • End Sub
  • Public Sub New(ByVal Message As String, ByVal
    Inner As Exception)
  • MyBase.New(Message, Inner)
  • End Sub
  • Public Sub New(ByVal Message As String, ByVal
    Inner As Exception, ByVal FileSize As Long)
  • MyBase.New(Message, Inner)
  • mlngFileSize FileSize
  • End Sub
  • Public ReadOnly Property FileSize() As Long

23
8.5 Programmer defined Exception Classes
  • Voorbeeld throwen van user defined exception
  • Public Class FileTooLargeException
  • Inherits ApplicationException
  • Private mlngFileSize As Long
  • Public Sub New(ByVal Message As String)
  • MyBase.New(Message)
  • End Sub
  • Public Sub New(ByVal Message As String, ByVal
    Inner As Exception)
  • MyBase.New(Message, Inner)
  • End Sub
  • Public Sub New(ByVal Message As String, ByVal
    Inner As Exception, ByVal FileSize As Long)
  • MyBase.New(Message, Inner)
  • mlngFileSize FileSize
  • End Sub
  • Public ReadOnly Property FileSize() As Long

24
8.5 Programmer defined Exception Classes
  • Afhandelen user defined exception
  • Private Sub btnUserDefined_Click(ByVal sender As
    System.Object, ByVal e As System.EventArgs)
    Handles btnUserDefined.Click
  • Dim lngSize As Long
  • ' Test a user-defined exception.
  • Try
  • lngSize GetSize(txtFileName.Text)
  • Catch FileTooLargeExceptionParameter As
    FileTooLargeException
  • MessageBox.Show( _
  • String.Format( _
  • "Please select a smaller file! " _
  • "The file you selected was 0
    bytes.", _
  • FileTooLargeExceptionParameter.FileSi
    ze))
  • Catch exceptionParameter As Exception
  • MessageBox.Show(exceptionParameter.Mes
    sage)
  • End Try
  • End Sub
Write a Comment
User Comments (0)
About PowerShow.com