Exception Handling and Event Handling
December 16, 2017
I. Exception Handling
What is Exception Handling in programming language ?
Exception handling is the process of responding to the occurrence, during computation, of exceptions – anomalous or exceptional conditions requiring special processing – often changing the normal flow of program execution. (wikipedia)
- In a language without exception handling
–When an exception occurs, control goes to the operating system, where a message is displayed and the program is terminated
- In a language with exception handling
–Programs are allowed to trap some exceptions, thereby providing the possibility of fixing the problem and continuing
Basic Concepts
- Many languages allow programs to trap input/output errors (including EOF)
- An exception is any unusual event, either erroneous or not, detectable by either hardware or software, that may require special processing
- The special processing that may be required after detection of an exception is called exception handling
- The exception handling code unit is called an exception handler
Exception Handling Alternatives
- An exception is raised when its associated event occurs
- A language that does not have exception handling capabilities can still define, detect, raise, and handle exceptions (user defined, software detected)
- Alternatives:
–Send an auxiliary parameter or use the return value to indicate the return status of a subprogram
–Pass a label parameter to all subprograms (error return is to the passed label)
–Pass an exception handling subprogram to all subprograms
Advantages of Built-in Exception Handling
- Error detection code is tedious to write and it clutters the program
- Exception handling encourages programmers to consider many different possible errors
- Exception propagation allows a high level of reuse of exception handling code
Exception Handling Control Flow
C++ Exception Handlers
- Exception Handlers Form:
try {
— code that is expected to raise an exception
}
catch (formal parameter) {
— handler code
}
…
catch (formal parameter) {
— handler code
}
The catch Function
- catch is the name of all handlers–it is an overloaded name, so the formal parameter of each must be unique
- The formal parameter need not have a variable
–It can be simply a type name to distinguish the handler it is in from others
- The formal parameter can be used to transfer information to the handler
- The formal parameter can be an ellipsis, in which case it handles all exceptions not yet handled
Throwing Exceptions
- Exceptions are all raised explicitly by the statement:
throw [expression];
- The brackets are metasymbols
- A throw without an operand can only appear in a handler; when it appears, it simply re-raises the exception, which is then handled elsewhere
- The type of the expression disambiguates the intended handler
Unhandled Exceptions
- An unhandled exception is propagated to the caller of the function in which it is raised
- This propagation continues to the main function
- If no handler is found, the default handler is called
Continuation
- After a handler completes its execution, control flows to the first statement after the last handler in the sequence of handlers of which it is an element
- Other design choices
–All exceptions are user-defined
–Exceptions are neither specified nor declared
–The default handler, unexpected, simply terminates the program; unexpected can be redefined by the user
–Functions can list the exceptions they may raise
–Without a specification, a function can raise any exception (the throw clause)
II. Event Handling
- An event is a notification that something specific has occurred, such as a mouse click on a graphical button
- The event handler is a segment of code that is executed in response to an event
to understand more about event handling, we take an example from Java and C# Programming language.
Java Swing GUI Components
- Text box is an object of class JTextField
- Radio button is an object of class JRadioButton
- Applet’s display is a frame, a multilayered structure
- Content pane is one layer, where applets put output
- GUI components can be placed in a frame
- Layout manager objects are used to control the placement of components
The Java Event Model
- User interactions with GUI components create events that can be caught by event handlers, called event listeners
- An event generator tells a listener of an event by sending a message
- An interface is used to make event-handling methods conform to a standard protocol
- A class that implements a listener must implement an interface for the listener
- One class of events is ItemEvent, which is associated with the event of clicking a checkbox, a radio button, or a list item
- The ItemListener interface prescribes a method, itemStateChanged, which is a handler for ItemEvent events
- The listener is created with addItemListener
Event Handling in C#
- Event handling in C# (and the other .NET languages) is similar to that in Java
- .NET has two approaches, Windows Forms and Windows Presentation Foundation—we cover only the former (which is the original approach)
- An application subclasses the Form predefined class (defined in System.Windows.Forms)
- There is no need to create a frame or panel in which to place the GUI components
- Label objects are used to place text in the window
- Radio buttons are objects of the RadioButton class
- Components are positioned by assigning a new Point object to the Location property of the component
private RadioButton plain = new RadioButton();
plain.Location = new Point(100, 300);
plain.Text = ″Plain″;
controls.Add(plain);
- All C# event handlers have the same protocol, the return type is void and the two parameters are of types object and EventArgs
- An event handler can have any name
- A radio button is tested with the Boolean Checked property of the button
private void rb_CheckedChanged (object o,
EventArgs e) {
if (plain.Checked) …
…
}
- To register an event, a new EventHandler object must be created and added to the predefined delegate for the event
- When a radio button changes from unchecked to checked, the CheckedChanged event is raised
- The associated delegate is referenced by the name of the event
- If the handler was named rb_CheckedChanged, we could register it on the radio button named plain with:
plain.CheckedChanged +=
new EventHandler (rb_CheckedChanged);